Como compilar sua própria versão do Dosbox com acesso a internet

Precisava instalar o Windows em um ambiente com Hyper-V, onde outras soluções de virtualização não podem ser instaladas por apresentarem problemas, como telas azuis e perda de performance. [referência]

Lembrei do Dosbox (não sei por que me lembrei dele! Provavelmente por que o Windows 9x possuí o kernel ligado ao MS-DOS), e para minha surpresa existiam pessoas que puderam rodar o Windows 9x nele. Por que não tentar?

A instalação ocorreu normalmente. Mas após a instalação, descobri que a VM não possuía acesso a internet. Isso por que o Dosbox não possui suporte a placa de rede nativamente. Mas, para nossa sorte, o h-a-l lançou o NE2000 Patch, que adiciona uma placa de rede virtual ao Dosbox.

O problema é que a versão que ele disponibilizou com a placa de rede é muito antiga (de 2008), e não possuía um bom suporte a alguns comandos úteis do Dosbox, como o imgmount, necessário para podermos acessar o disco virtual para instalar o Windows 9x.

Decidi então que precisava usar a última versão disponível até o momento que escrevo este post (0.74) e adicionar suporte a NE2000 a ela. O h-a-l disponibilizou o código-fonte do Patch, por isso podemos adiciona-lo ao código-fonte do Dosbox.

Você pode realizar o download pronto do Dosbox 0.74 com NE2000 Patch neste post.

DOWNLOAD

Dosbox (Source) [download]: Adicionaremos o suporte ao NE2000 a ele.

Microsoft Visual Studio Express 2012 for Windows Desktop [download]: Precisamos dele para compilarmos o código fonte do Dosbox e da NE2000. Não podemos adiciona-lo diretamente no executável.

SDL Development Libraries para Visual C++ [download]: O Dosbox usa o SDL para processar vídeo e áudio. Suas dependências tem que ser adicionadas ao código-fonte do Dosbox para que o código possa ser compilado. Graças a ela, o Dosbox pôde ser portado para outras plataformas, como MacOS e sistemas Unix, devido a compatibilidade do SDL com elas.


OPCIONAIS

NE2000 Patch [download]: Adiciona a NE2000 ao Dosbox. Com ela, poderemos ter acesso a internet. Ela é opcional, podemos compilar o Dosbox sem ela. Mas é interessante caso você queira instalar o Windows 9x nele.

Patch – SETUP (EXE) [download]: Ele é um programa do Unix portado para Windows. Com ele, podemos aplicar patches em código-fonte sem ter que adicionar cada linha manualmente.

WinPcap Developer Pack [download]: Necessário apenas se você deseja adicionar suporte a NE2000. Para obter acesso a internet, ela usa o Pcap, que filtra os pacotes com destino a nossa placa de rede física e redireciona os pacotes destinados a VM ao Dosbox.

WinPcap for Windows [download]: O WinPcap acima é para podermos compilar o Dosbox. Mas para que possamos testar o acesso a internet após a compilação, precisamos possuir o “cliente” do WinPcap, responsável por filtrar os pacotes na placa de rede física.


Após instalar o Visual Studio, crie o diretório MS-DOS em C: e extraia o código-fonte do Dosbox nele.

Agora precisamos instalar as dependências do código-fonte, como o SDL e o WinPcap (este último apenas se você precisa ter acesso a internet).

Crie o diretório Development em C: e copie os arquivos *.zip de ambos para ele. Dê botão direito neles e clique em Extrair aqui…

ScreenShot048

Após a extração, renomeie-os para que eles possuam somente o nome da dependência, sem sua versão. Isso por que futuramente podemos precisar atualizar elas, e tudo o que precisaremos fazer é deletar tudo o que está dentro dos diretórios e colocar os arquivos novos, sem precisar alterar configurações no Visual Studio.

Acesse o diretório C:MS-DOSvisualc_net e abra o arquivo dosbox.vcproj. Ele perguntará se você deseja migrar o código-fonte para o Visual Studio 2012. Aceite.

Agora, precisamos adicionar o NE2000 Patch ao código-fonte do Dosbox. Renomeie o arquivo ne2000_08_11_2012.diff para ne2000.diff e mova-o para o diretório C:MS-DOS (onde extraímos o código-fonte do Dosbox). Após a instalação do Patch (Setup – EXE), abra o prompt de comando como administrador e digite os comandos:

set PATH=%PATH%;%ProgramFiles(x86)%GnuWin32bin
cd C:MS-DOS
write ne2000.diff
patch -p0< ne2000.diff

Ao usar o comando write, abrirá o WordPad. Simplesmente clique no disquete floppy localizado no topo da tela. Precisamos fazer isso por que se não o patch retorna o erro Assertion failed: hunk, file ../patch-2.5.9-src/patch.c, line 354. Isso por que o Unix usa o sistema LF, o Windows usa o sistema CRLF. (Mais sobre)

Quando chamamos um comando no prompt, ele verifica se o comando é um comando interno (como dir, cd) ou externo. Quando ele não localiza um comando (como patch, comando externo), ele procura na variável %PATH% o programa que possui este nome para poder executa-lo. Se não encontra, retorna uma mensagem de erro (‘patch’ não é um comando interno ou externo). Apenas adicionamos a linha C:Program Files (x86)GnuWin32bin a ela. Assim, quando executarmos o comando patch, ele o encontrará e executará o comando solicitado.

Após adicionarmos o diretório onde o patch.exe se encontra (se você mudou o local onde ele foi instalado, mude %ProgramFiles(x86)% de acordo com o diretório que você selecionou), mudamos o diretório atual para C:MS-DOS (cd = change dir, comando interno).

Após isso, chamamos o patch que atualizará o código-fonte do Dosbox, adicionando o suporte a placa de rede. Usamos o argumento -p0 para indicar que ele deve procurar os arquivos que devem ser atualizados a partir do diretório que estamos (C:MS-DOS). -p significa path, ou diretório.

Agora, acesse o diretório C:MS-DOSvisualc_net e abra o arquivo Dosbox.vcproj. Ele perguntará se você deseja migrar o código-fonte para o formato do Visual Studio 2012. Aceite. Ele mostrava alguns avisos, mas é normal.

Após o programa abrir, abaixo de Solution ‘Dosbox’, clique em dosbox (logo abaixo, com dois símbolos de +). Aparecerá uma chave de fenda (“Propriedades”) em Solution Explorer. Se ela não estiver aparecendo, estique a barra e ela aparecerá.

ScreenShot052

No Visual Studio anteriores, no topo da janela, clique em “Ferramentas (Tools)” e selecione o menu “Opções (Options)”. Quando ele abrir, expanda “Projetos e Soluções(Projects and Solutions)”.

Agora, precisamos adicionar as dependências que extraímos anteriormente (SDL e WinPcap). Para isso, clique em VC++ Directories.

ScreenShot053

No topo da janela, em Configuration, mude de Debug para Release e clique em Configuration Manager. Nele, na coluna Configuration, mude para Release novamente.

Voltará a tela anterior. Em Include Directories, expanda o menu e clique em <Edit…>. Clique na pasta e adicione os diretórios:

C:DevelopmentWpdPackInclude
C:DevelopmentSDLinclude

ScreenShot056

Em Library Directories, faça o mesmo, mas adicione os diretórios:

C:DevelopmentSDLlibx86
C:DevelopmentWpdPackLib

Agora, expanda, no menu do lado direito, Linker > Input. Em Additional Dependences, remova da lista:

sdl_net.lib
zlib.lib
libpng.lib
curses.lib
odbc32.lib
odbccp32.lib

OK e feche a caixa de diálogo.

Agora, em Solution Explorer, entre em Source Files > visualc > config.h

Mude #define C_SSHOT 1 para #define C_SSHOT 0.Precisamos fazer o mesmo com C_MODEM e C_IPX. Removemos dependências das quais elas precisam para funcionar, por isso a desabilitamos.

Mude a linha C_CORE_INLINE para 1 para melhorar o processamento da emulação no Dosbox.

Agora, em Source Files, procure por winres.rc, dê botão direito nele e clique em View Code.

ScreenShot058_thumb[1]

Remova a linha #include “afxres.h” no topo do arquivo.

Agora, copie  o arquivo SDL.dll que está no diretório C:DevelopmentSDLlibx86 em C:MS-DOSvisualc_netRelease. Execute o arquivo Dosbox.exe e pronto!

Somente o executável do Dosbox e a dll do SDL são importantes para que o programa possa funcionar. Recomendo instalar a versão disponibilizada do Dosbox e substituir o arquivo e a DLL delas pelas que você compilou. Assim, os atalhos no Menu iniciar e a opção de editar as configurações do Dosbox estarão disponíveis.

Para poder liberar o acesso a internet, recomendo ler o post que escrevi como instalar o Windows 9x no Dosbox.

Um abraço e boa-sorte! Qualquer dúvida, estamos aqui.


Building Dosbox with Visual C++ 2008 Express http://www.Dosbox.com/wiki/Building_Dosbox_with_Visual_C_2008_Express

Help inserting Patch in Dosbox http://vogons.zetafleet.com/viewtopic.php?t=33402&sid=ba5e3516527ff9511f34df93e3da6d7d

http://www.mail-archive.com/gnuwin32-users@lists.sourceforge.net/msg01528.html

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s