Dosemu: o DOS emulado em Linux
O DOSEMU tem funcionalidades como emulação de memória estendida e expandida, emulação de IRQs,
de CPUs, conjunto de caracteres etc.
Todo linuxer iniciante tem uma dúvida que o incomoda e que o faz perguntar aos usuários mais experientes: Será que eu posso rodar no Linux aquele programinha de controle financeiro que eu utilizava no DOS? Essa é o tipo de pergunta que não lhe sai da cabeça, apesar de mais tarde ele descobrir que o GnuCash dá de dez a zero nesse programa chinfrim, que só vive pedindo reindexação da base de dados.
Se você se encaixa nesse perfil,
pode começar a abrir um sorriso: há uma enorme chance de você continuar a utilizar esse seu programinha.
ARRHGGG!!!!
Como o nome já sugere, o DOSEMU significa DOS EMUlator. Esse software tem como funcionalidade básica a disponibilização de um ambiente emulado DOS no Linux. Quando este artigo foi escrito o DOSEMU estava na na versão 1.0.1, que vem se mostrando bastante estável. E para aumentar ainda mais o seu sorriso, ele é distribuído sob licença GPL.
O projeto do DOSEMU foi iniciado em 1992 sob a batuta do Matthias
Lautner. Após dois anos de inatividade (de 1995 a 1997), foi lançada em 2000 a versão 1.0, sob a coordenação de Hans Lermen. Para mais informações visite o site www.dosemu.org. Ao contrário da maioria dos softwares distribuídos sob licença GPL (e BSD), ele foi escrito somente para Linux. Versões para outros sistemas operacionais Unix-like não existem até o momento.
O DOSEMU tem funcionalidades interessantes como, por exemplo, emulação de memória estendida e expandida, emulação de IRQs, de CPUs, conjunto de caracteres, emulação de vários tipos de teclado, execução em modo gráfico no X Window, emulação de winchester a partir de um arquivo imagem (hdimage), redirecionamento de filas de impressão para LPT1: LPT2: e LPT3: no ambiente emulado, emulação de suporte a som, entre outras.
Particularmente programas em
Clipper têm se mostrado bastante estáveis no DOSEMU, e algumas vezes inclusive com ganho de performance. Na maioria das vezes o DOSEMU é uma solução ao alcance de todos para uma migração de uma rede para
Linux. Porém, por alguns motivos
inerentes ao Clipper (questões de permissões, índices etc.), sempre indicamos a recompilação do programa em Clipper com o compilador FlagShip.
Para se ter uma idéia do nível de maturidade desse programa, há notícia de que é possível até emular alguns jogos, como o DukeNuke 3D.
Instalação do DOSEMU
Caso você esteja em casa aborrecido sem nada que fazer, no site do projeto é possível ser feito um download do arquivo fonte (extensão .tar.gz) e compilá-lo. É divertido!! Tente!! Porém, se você é daqueles que não podem perder tempo (dica: uma perda de tempo que gera ganho em conhecimento), podemos ser mais práticos e instalá-lo a partir do pacote rpm de sua distribuição favorita, ou mesmo fazer download de versões por nós customizadas e pré-configuradas em www.lbs.com.br/download.php
Para instalá-lo:
[root@pixies root]# rpm -Uhv dosemu-1.0.1-2lbs.i386.rpm
Perceba que [root@pixies root]# é o prompt do shell da sua máquina (deve ser algo parecido).
O processo de instalação cria o diretório padrão de trabalho do DOSEMU. Trata-se do diretório /var/lib/dosemu.
Nesse diretório está o arquivo de configuração global global.conf.
Porém uma informação interessante é que não editamos esse arquivo, e sim
o arquivo /etc/dosemu.conf, que contém as variáveis que serão lidas, interpretadas e incluídas pelo DOSEMU em seu modus operandi. Para ser mais claro: não toque no arquivo global.conf. O
arquivo /etc/dosemu.users define quais usuários podem utilizá-lo.
As variáveis em /etc/dosemu.conf são declaradas na seguinte forma:
$_var = (n) n é um valor numérico
$_var = "string" string é uma cadeia
de caracteres.
Exemplo:
$_ems = (1024)
Declaramos que a variável $_ems terá como valor numérico 1024.
$_com1 ="/dev/ttySO"
Declaramos que a variável $_com1 terá como valor a string /dev/ttyS1.
Principais variáveis do DOSEMU
Agora vamos descrever as principais variáveis em /etc/dosemu.conf. As demais variáveis poderão ser deixadas com seu valor default:
$_xms Define a quantidade de memória expandida que será emulada, em kbytes.
$_ems Define a quantidade de memória estendida que será emulada, também em kbytes
$_dpmi Quantidade de memória em modo DPMI em kbytes. Default=off. Para execução de programas Clipper, utilizar 4096.
$_dosmem Quantidade de memória baixa DOS em kbytes. Valor <= 640.
$_hogthreshold Se igual a 0, todo poder de processamento para o DOSEMU.
$_term_char_set Determina o conjunto de caracteres a ser utilizados no ambiente emulado. O melhor resultado foi com o valor ibm.
$_floppy_a Determina que tipo de drive é o drive A:. Valores como threeinch e fiveinch são suportados.
$_floppy_b O mesmo que o anterior, porém o drive-alvo é o B.
$_hdimage Indica que o arquivo contido em /var/lib/dosemu é o arquivo de imagem de HD. Esse arquivo contém informações sobre formatação FAT e permite a sua utilização como
se fosse o drive C: do DOS.
$_com1 $_com2 $_com3 $_com4 Determinam quais dispositivos Linux serão emulados como as portas seriais do DOS. Valores como /dev/ttyS0,
/dev/ttyS1, /devttyS2, /dev/ttyS3, entre outros, são suportados.
$_printer Determina qual impressora contida em /etc/printcap será emulada como LPT1:.
Execução e utilização do DOSEMU
Após a configuração dessas variáveis, poderemos iniciar o DOSEMU carregando o sistema DOS de um
disquete no drive A: com o seguinte comando:
[lucas@pixies lucas]$ dos -A
Como já se pode perceber, se meu disquete que contém o DOS estiver
no drive B:, escreveremos:
[lucas@pixies lucas]$ dos -B
Você deve estar pensando: preciso ter um disquete de DOS para que
eu possa utilizar o DOSEMU? A princípio sim, pois precisamos de um command.com, msdos.sys, io.sys
ou equivalente etc. para executá-lo. O DOSEMU se encarrega de mascarar as solicitações dos programas DOS para o hardware. Nenhuma versão de algum DOSEMU vem com o DOS comercial, pois isso se caracterizaria como pirataria. Algumas distribuições incluem um projeto de DOS conhecido como FreeDOS. O grande problema é que esse é um projeto ainda iniciante e que não suporta de forma segura todas as funcionalidades dos DOS comerciais.
Como para tudo existe uma solução, temos também uma para nossas funções corriqueiras. A Caldera Systems disponibiliza uma versão do DR-DOS gravada em um arquivo hdimage de uso livre pessoal e comercial. Podemos obtê-la no site ftp://ftp.lineo.com.
Trata-se do arquivo hdimage.drdos703.eval.
Instalando esse arquivo no diretório /var/lib/dosemu e configurando a
variável $_hdimage para ele, basta
escrevermos:
[lucas@pixies lucas]$ dos
e teremos um sistema DOS totalmente disponível para nosso uso.
Não se esqueça de configurar o autoexec.bat e o config.sys normalmente, como se estivesse configurando uma máquina DOS qualquer.
Essa imagem contém alguns utilitários interessantes em seu diretório bin. Um deles é o exitemu, que permite a saída imediata do ambiente emulado
e o retorno para o shell do Linux e o utilitário lredir.
O utilitário lredir é bastante interessante: com ele podemos redirecionar diretórios no sistema de arquivos Linux para um drive virtual dentro do ambiente emulado, identificado por uma letra. Por exemplo, escrevendo:
C:> LREDIR D: LINUX\FS
A unidade D: será criada e, ao acessarmos, estaremos na raiz do sistema de arquivos Linux. Lembre que nesse caso serão obedecidas as permissões de cada diretório. Outro exemplo:
C:> LREDIR E: LINUX\FS\MNT\CDROM
Estaremos redirecionando o drive
E: para o diretório /mnt/cdrom no
sistema de arquivo Linux. Se tivermos um CD-ROM ou alguma outra coisa montada nesse diretório, teremos
total acesso.
Finalizando
Caso você deseje expressar e
compartilhar alguma experiência
bem-sucedida ou mesmo malsucedida,
tirar algumas dúvidas ou apenas bater um papo, acesse o nosso site em www.lbs.com.br e entre em nosso
fórum de discussão via Web. Suas
palavras serão bem-vindas.