- Lançado em 1996, Quake foi um jogo que coincidiu com três mudanças tecnológicas ao mesmo tempo: aceleradores 3D, internet e a transição do MS-DOS para o Windows 95
- A id Software aproveitou o compilador
djgpp e uma estrutura compatível com DPMI para criar um único executável capaz de rodar tanto no DOS quanto no Windows 95
- Por meio do sistema “Chunnel” da Mpath, foi possível fazer o Quake para DOS acessar a pilha Winsock TCP/IP do Windows 95
- Essa estrutura era composta por elementos como
quakeudp.dll, genvxd.dll e mgenvxd.vxd, fazendo a intermediação para que o executável de DOS se comunicasse com a API de rede Win32
- Mais tarde, quando a id Software migrou para executáveis exclusivos de Win32 (WinQuake, GLQuake), essa estrutura complexa desapareceu
Quake e o período de transição dos sistemas operacionais
- Entre 1996 e 1997, a participação de mercado do MS-DOS caiu pela metade, e a Microsoft impulsionava a transição para o Windows 95 e o NT
- Algumas desenvolvedoras, como a Blizzard North, criaram jogos exclusivos para Windows 95, mas a id Software optou por dar suporte a DOS e Windows com um único executável (
quake.exe)
- O
quake.exe foi projetado para usar o cliente DPMI do DJGPP, sendo compatível tanto com o cwsdpmi.exe do DOS quanto com o servidor DPMI do Windows 95
- O engenheiro da Microsoft Raymond Chen descreveu isso como um “caso impressionante de um programa funcionando corretamente em extensores heterogêneos”
Rodando Quake no ambiente DOS
- Para executar Quake no DOS, eram necessários apenas quatro arquivos:
quake.exe, config.cfg, pak0.pak e cwsdpmi.exe
- O modo multiplayer oferecia suporte a modem, NullModem, IPX e TCP/IP
- IPX era voltado para LAN, enquanto TCP/IP era para a internet, mas o DOS não vinha com uma pilha TCP/IP por padrão
- O único TSR de TCP/IP para DOS era o BWNFS da Beame & Whiteside, extremamente caro: 395 dólares (em 1996)
Execução no Windows 95
- Ao rodar o
quake.exe dentro da caixa DOS virtual (dos-box) do Windows 95, ele funcionava da mesma forma
- Como usava o servidor DPMI do Windows 95, o
cwsdpmi.exe não era necessário
- A execução era estável, mas exigia 16 MB de RAM ou mais, com overhead de memória maior que no DOS
- O acesso à VGA era permitido diretamente, então era possível rodar em tela cheia sem perda de desempenho
q95.bat e o Chunnel da Mpath
- O
q95.bat não era apenas um script para iniciar o Quake: ele também ativava conexões TCP/IP por meio do sistema de tunelamento Winsock da Mpath (Chunnel)
- A Mpath Interactive operava um serviço de jogos online (Mplayer) e dava suporte a partidas pela internet em vários jogos, incluindo Quake e Unreal
- Na época, o engenheiro da Mpath Larry Hastings contou que jogou um deathmatch pela internet com a equipe da id Software em builds iniciais do Quake
- A Mpath recebeu o código-fonte do Quake, modificou-o para se comunicar com a pilha de rede do Mplayer e licenciou a tecnologia Chunnel para a id
Estrutura técnica do Chunnel
- O
q95.bat executava o qlaunch.exe, que por sua vez carregava a quakeudp.dll
- A
quakeudp.dll atuava como ponte com o Winsock (wsock32.dll)
- Por meio da
genvxd.dll, ela carregava o driver de dispositivo virtual mgenvxd.vxd e se comunicava com o Win32 pela interrupção 0x48
- A implementação de sockets BSD do Quake (
mpplc.c) usava código fornecido pela Mpath e encaminhava as chamadas de rede por interrupções de software
- A
genvxd.dll fazia o unmarshalling dessas chamadas e as repassava ao Winsock
- Os símbolos de
mgenvxd.vxd incluem o nome de John Cash
- Essa tecnologia era uma tecnologia patenteada e proprietária da Mpath, e seu código-fonte não foi publicado
- Depois de dezembro de 1996, quando a id Software passou para executáveis exclusivos de Win32 (WinQuake, GLQuake, QuakeWorld), a estrutura do Chunnel foi abandonada
Conclusão
- O suporte a TCP/IP do Quake foi implementado com uma estrutura engenhosa em que um executável DOS chamava indiretamente a pilha de rede do Windows 95
- Era uma tecnologia híbrida que operava na fronteira entre DOS e Windows, ilustrando o período de transição do networking em jogos em meados dos anos 1990
- Mais tarde tudo foi simplificado com a adoção exclusiva do Win32, mas, para a época, isso simbolizava um grande desafio técnico e uma inovação no meio da transição de sistemas operacionais
4 comentários
Naquela época, John Carmack era um gênio entre gênios do desenvolvimento.
Foi muito divertido ler esse ótimo texto.
kkk, muito divertido.
Comentários do Hacker News
Isso me fez lembrar da época em que eu fazia experimentos direto com DJGPP e DPMI
Naquele tempo, isso realmente parecia uma tecnologia futurista
Especialmente quando eu estava jogando Star Wars: Dark Forces e o carregamento era lento demais, troquei o DOS/4GW por outro extensor de DOS e, surpreendentemente, ficou de 3 a 5 vezes mais rápido
Provavelmente porque o novo extensor acessava o hardware de disco diretamente em modo protegido, sem alternar para o modo real
No começo do Linux, quando ainda não havia rede, eu usava a pilha TCP/IP KA9Q
Link do código do KA9Q
Ela rodava em DOS, mas podia ser portada para Linux com facilidade
Recentemente também usei um cliente CWSDPMI, que permite que programas de 32 bits rodem tanto em DOS quanto em Windows
Wiki do CWSDPMI
Quando eu era criança, aprendi a soldar para poder fazer meu próprio cabo null modem
Depois descobri a existência dos resistores e montei eu mesmo um Covox Speech Thing, uma placa de som para porta paralela
Eram tempos muito divertidos
Comprei um monte de resistores grandes na Maplin e soldei tudo meio nas coxas, mas funcionou perfeitamente de primeira
Fiz isso para jogar OMF2097 com meus amigos, e foi ótimo não precisar brigar por um único teclado
Era muito legal reproduzir arquivos Mod num dispositivo que eu mesmo tinha feito e ouvir em caixas de som portáteis
Depois que conheci fluxo de solda, soldar ficou muito mais fácil
Ao ver a expressão “engenheiros do DJGPP”, lembrei que, na prática, era basicamente uma pessoa só: DJ Delorie
Portar toda a toolchain do GCC para DOS/Windows foi realmente um feito impressionante
Não sei se ele adicionou os recursos a pedido da id Software ou só por diversão, mas é algo admirável
Ele é o autor do CWSDPMI e trabalhou diretamente com a id
A expressão soa meio estranha para um projeto open source, mas é bem possível que tenha sido assim mesmo
E o espanto com o fato de o Quake rodar numa VM provavelmente vem de não conhecer o modo VM86
Fiquei curioso se esse tipo de disciplina de educação física é comum nos EUA
O nome “Chunnel” provavelmente vem do Channel Tunnel
Lembro de ter lido o TECHINFO.TXT quando tentei configurar o multiplayer por TCP/IP do Quake
Lá dizia que ele usava a pilha TCP/IP da Beame & Whiteside
Baixei o software em ftp.cdrom.com e instalei tudo, mas na época eu não entendia o suficiente de redes, então a configuração foi bem difícil
No fim, a latência era alta e o desempenho ruim, então jogar NetQuake no WinQuake era muito melhor
Tenho a impressão de que Fabian começou uma pesquisa sobre Quake
Eu também gostaria de receber ajuda para resolver problemas de OpenGL no meu fork de chocolate Doom 3 BFG
Mas Quake é um mundo muito mais complexo do que Doom, então é difícil cobrir tudo apenas com um livro
Nos anos 90, bastava ligar para o número do modem de um amigo para jogar Quake ou Doom em multiplayer com facilidade,
e hoje isso é quase impossível sem servidores, o que é irônico
No começo não havia TCP/IP, mas isso foi resolvido depois com o driver TCP do iDOOM
Quando testei isso no dormitório da faculdade, pareceu realmente revolucionário
É como uma espécie de Hamachi embutido no motor do jogo
O problema é que hoje muitas empresas de jogos bloqueiam servidores privados para proteger a receita com venda de skins
A Valve é uma exceção, permitindo servidores customizados de TF2, e o Minecraft ainda deixa você desligar a autenticação e jogar com amigos
Quando o Windows 95 passou a trazer TCP/IP embutido, acabou a época em que era preciso instalar TCP separadamente
O mundo mudou quando as placas de rede começaram a se popularizar entre consumidores
Mesmo assim, o Windows não instalava TCP/IP se você não tivesse uma placa de rede, e nem o comando
pingexistiaFico curioso sobre o que acontece hoje no Windows 11 se você instalar sem rede
Até hoje, meu tutorial de DJGPP/NASM que escrevi 25 anos atrás ainda aparece no Google