DOSEMU

L'emulatore DOS per Linux

di Davide Michel Morelli
moreld@dsi.unimi.it

Da quando Linus Torvald ha creato Linux, questo SO è stato sempre nell'ombra. Adesso, invece, la sua fama sta crescendo giorno per giorno, i programmi ``funzionanti'' sotto di esso si moltiplicano mese per mese, e, sicuramente, non poteva mancare l'emulatore del più famoso SO in circolazione: il DOS.

Un po' di storia

L'idea del DosEmu nasce dalla mente di Matthias Lautner, programmatore Linux, che nel Settembre 1992 rilascia la prima versione beta, la 0.1. Da allora è passata molta acqua sotto i ponti, tanto che adesso il responsabile non è più Lautner, ma James MacLean (jmaclean@fox.nstn.ns.ca), dopo che lo stesso Lautner aveva lasciato, a sua volta, il posto a Robert Sanders. Anche il DosEmu stesso ha fatto passi da gigante nelle 19 release fino ad ora uscite, tanto che è persino utilizzabile il compilatore C++ 3.0 della borland o giocare a giochi Dos del calibro di Warcraft, DESCENT e persino il gioco per eccellenza: DOOM (con seguito incluso).

I preliminari

Per funzionare il DosEmu non è necessario avere un computer super dotato o file che non sono inclusi in una qualsiasi distribuzione. Per sicurezza, ecco cosa avete bisogno per compilare propriamente il DosEmu.

Comunque migliori informazioni possono essere trovate nell'HowTo del DosEmu, reperibile su ftp.unipd.it:/pub/Linux/pluto/docs/HOWTO.

Il patch del kernel

Con l'ultima release del DosEmu vi è la possibilità di poter eseguire anche Windows 3.x, anche se bisogna precedentemente patch-are il kernel. La cosa è molto più semplice di quanto si possa pensare. Nella sotto-directory dpmi/ nella directory del sorgente del DosEmu vi è il file kernel.diff che è il file necessario per effettuare il patch-ing al kernel. Per effettuare questa operazione devi avere i permessi di root poiché bisogna andare a modificare i file sorgente del kernel di linux che di default sono di proprietà di root.

A questo punto le cose da fare sono :

  1. copiare il file kernel.diff nella directory /usr/src (o quella comunque appena precedente a quella dei sorgenti di linux)
  2. eseguire "patch kernel.diff"
  3. ricompilare il kernel
  4. sostituire il nuovo kernel a quello vecchio
  5. resettare la macchina
  6. compilare il dosemu
Nel caso in cui il dosemu, nella schermata principale dovesse scrivere "Kernel is not patched for experimental use of Windows 3.1", ovvero non ha riscontrato il patching al kernel, allora ricontrolla i passi sopra citati. Avrai fatto sicuramente un errore. Ricorda comunque che questo patching non è necessario per compilare il DosEmu.

Configurare il makefile del dosemu prima di compilarlo

Configurare il Makefile del dosemu è molto semplice visto che tutti i cambiamenti drastici sono preceduti da una spiegazione. Ma vediamo alcuni esempi (i più importanti logicamente). Inanzitutto se hai installato la slackware in formato ELF, tu puoi compilare il dosemu in ELF, cambiando la riga # ELF=1 in ELF=1 Se hai installato sul tuo sistema X/Windows ma sei sicuro di non voler mai utilizzare il DosEmu sotto X, allora puoi cambiare la riga USE_X=1 in # USE_X=1

Questo farà si che il dosemu non venga compilato per poter essere utilizzato sotto X.

Andando avanti nella scansione del Makefile principale, si possono trovare due righe, una commentata, l'altra no, riguardanti la variabile LINUX_KERNEL. Questa variabile d'ambiente contiene la directory ove i sorgenti del kernel di linux sono situati. Il makefile cercherà automaticamente codesta directory. Nel caso in cui non la trovasse visualizzerà il seguente messaggio d'errore:

kversion.sh: cannot find any of the standard linux trees, giving up points to your Linux source tree, which at least must contain ./include/* In addition (if your ./linux/include lacks the version.h file): You may edit and uncomment KERNEL_VERSION in the main Makefile, but this is not recommended ! The format is: KERNEL_VERSION=x0yy0zz meaning Linux version x.yy.zz Example: KERNEL_VERSION=1002002 meaning Linux version 1.2.2 Prima di fare quello che suggerisce il Makefile prova a commentare la riga LINUX_KERNEL = $(shell sh ./tools/kversion.sh -find -print) e a decomentare invece #LINUX_KERNEL = /usr/src/linux mettendo al posto di /usr/src/linux la directory ove i sorgenti di linux sono contenuti. Salva, esci e prova a rimandare in esecuzione la compilazione (se già hai letto le altre specifiche o se non ti interessano). Nel caso in cui anche questa soluzione non andasse a buon fine allora segui quello che ti consiglia il messaggio di errore sopra citato. Se nemmeno questo và a buon fine, allora il tuo sistema non è configurato correttamente.

Molto più avanti vi sono due delle righe più importanti per la corretta configurazione del Makefile del DosEmu. La prima è

CONFIG_FILE = -DCONFIG_FILE=\"/etc/dosemu.conf\" Questa directory specifica al Dosemu in quale directory (scusate il gioco di parole) dovrà andare a cercare il suo file di configurazione per essere eseguito correttamente. Di default la /etc è di root e quindi tu non ci puoi andare a scrivere dentro. A questo punto ci sono 2 alternative: la prima è quella di chiedere al tuo sysadm se può inserire il file dosemu.conf (vedi sotto per maggiori informazioni) nella directory /etc. Se il tuo sysadm ti dice ok, allora nessun problema, altrimenti, e questa è la seconda possibilità, cambia la riga sopra citata in CONFIG_FILE = -DCONFIG_FILE=\"/la_tua_home/dosemu.conf\" In questo modo il DosEmu, quando chiamato, andrà a cercare il file di configurazione non in /etc, ma nella directory da te specificata. La stessa storia vale per la riga subito sotostante, ovvero DOSEMU_USERS_FILE = -DDOSEMU_USERS_FILE=\"/etc/dosemu.users\" di cui ti rimando all'HowTo del DosEmu per sapere a cosa serve codesto file.

Questo è tutto quello che devi sapere su come configurare egreggiamente la parte principale del DosEmu.

COMPILARE IL DOSEMU

Il DosEmu può essere compilato in due modi diversi, con o senza Tex. Nel caso in cui tu non lo abbia, il Tex, scrivi "make most", altrimenti "make doeverything". Questo è tutto quello che devi sapere su come compilare il DosEmu. Attenzione: se non sei root alla fine della compilazione il DosEmu mostrerà alcuni messaggi di errore. Questo perché esso cercherà di auto-installarsi nelle directory che di default sono di proprietà di root, tipo /usr/bin o /usr/man. Se tu non vuoi che il DosEmu si auto-installi esegui "make" e basta.

Configurare il DOSEMU

Configurare il DosEmu è facile quanto compilarlo. Nella directory examples/ vi è il file config.dist. Questo file è l'unico file necessario per il corretto funzionamento del DosEmu. Per default codesto file deve essere copiato nella directory /etc sotto il nome di dosemu.conf, logicamente con i permessi di root. Nel caso in cui tu non sia root o comunque il tuo sysadm non ti conceda di inserirlo nella directory di default, come detto pocanzi non ci sono problemi, basta copiarlo nella directory specificata nel Makefile alla voce CONFIG_FILE. Anche questo file, il dosemu.conf, è facile da modificare poiché anche in questo caso, per ogni voce vi è, prima, una breve descrizione dei possibili cambiamenti. Partendo dalla testa del file troviamo come prima cosa la parte relativa ai flag per il debuging, tra i quali si annoverano il flag per il disk, per la porta seriale e per quella parallela e persino un flag per l'hardware. Per default questi flag sono disattivati tramite la parola off vicino ad ognuno di essi. Nel caso in cui si necessiti di settare qualche flag, basta mettere, come dice lo stesso file, on al posto di off ed il gioco è fatto. Proseguendo nella visione del file di configurazione si trovano in ordine: i settaggi per la tastiera, per la porta seriale e per quella parallela comprensiva di settaggio mouse, per il network e per l'emulazione del terminale, che per default è terminal { charset latin updatefreq 4 color on } Subito dopo la parte relativa al settaggio del terminale si trova il settaggio dell'X/windows nel caso in cui si voglia usare il DosEmu in una finestra dell'X/Windows e la parte necessaria al giusto configuramento relativo alla parte grafica. I possibili settaggi di questa parte, come del resto quelli di tutte le altre, sono spiegate eccellentemente nello stesso file di configurazione, ed è quindi impossibile spiegare come e cosa cambiare in modo migliore di come ciò è già scritto nel codesto file.

Tornado alla scansione del "config", vi è una sola cosa da menzionare con maggiore attenzione: la parte relativa alle partizioni dos, o, come definite nel file stesso, per gli Hard Disks. Questa sezione è egreggiamente spiegata, con una piccola dimenticanza: viene menzionata solo il modo per settare una partizione dos. Nessun problema, ecco come risolvere il giallo: per settare una partizione il dosemu.config richiede una stringa simile a

disk { partition "/dev/hda1" readonly } che setta la partione dos definita in /dev/hda1 come la partizione di boot del dos, partizione in sola lettura. Tralasciando il fatto che, come spiegato nel file stesso, per far diventare la partizione anche scrivibile basta togliere il readonly ed il gioco è fatto, per poter vedere anche un altro drive, basta inserire una altra riga come quella sopra e, nuovamente, il gioco è fatto. Se ad esempio si inserisce la riga disk { partition "/dev/hdb1" readonly } sotto quella precedentemente proposta, il DosEmu vedrà, e logicamente settera, due HD, /dev/hda1 come C: e /dev/hdb1 come il D: . Inoltre, al dosemu non importa come sia settati fisicamente i vari HD, ovvero quale è il master e quale è lo slave: infatti se io avessi fisicamente il drive individuato da /dev/hda1 settato come Master e /dev/hdb1 come Slave, posso sempre far vedere al DosEmu il /dev/hdb1 come Master e /dev/hda1 come Slave senza nessun problema, addio così ai restringimenti del M$Dos. Concludono il file di configurazione le parti relative al DosEmu Boot, al Floppy Disks e alla stampante.

Conclusioni

Come si è potuto notare nella lettura dell'articolo, il DosEmu, si presenta come il migliore emulatore M$Dos in circolazione. Nulla è lasciato al caso, nulla è dimenticato, perfino i file di configurazione sono descritti più che egreggiamente, e questo porta la possibilità di fare errori molto vicina allo 0%. Praticamente il DosEmu è riuscito a fare quello che non è riuscita a fare, scusate il gioco di parole, la Micro$oft : far funzionare il Dos in multitasking.