11 pontos por GN⁺ 2025-11-19 | 4 comentários | Compartilhar no WhatsApp
  • 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

 
bungker 2025-11-21

Naquela época, John Carmack era um gênio entre gênios do desenvolvimento.

 
thinkpad 2025-11-20

Foi muito divertido ler esse ótimo texto.

 
ipuris 2025-11-20

kkk, muito divertido.

 
GN⁺ 2025-11-19
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

    • Essa placa de som de porta paralela foi minha placa de som principal por um bom tempo
      Comprei um monte de resistores grandes na Maplin e soldei tudo meio nas coxas, mas funcionou perfeitamente de primeira
    • Como eu não tinha permissão para usar um ferro de solda, cortei um cabo serial comum e o adaptei para null modem
      Fiz isso para jogar OMF2097 com meus amigos, e foi ótimo não precisar brigar por um único teclado
    • Eu também aprendi a soldar naquela época
      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

    • Na época, o DJGPP tinha uma comunidade bem grande, e boa parte da otimização do Quake também deve muito a Charles Sandmann
      Ele é o autor do CWSDPMI e trabalhou diretamente com a id
    • Também me lembro de ter havido de fato comunicação relacionada ao CWSDPMI entre os dois
      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
    • Eu adoraria ver uma entrevista com DJ Delorie
    • Dei uma olhada no site dele e vi que, na faculdade, ele cursou tiro esportivo
      Fiquei curioso se esse tipo de disciplina de educação física é comum nos EUA
    • Aprendi a programar por causa do DJGPP
  • O nome “Chunnel” provavelmente vem do Channel Tunnel

    • Ou talvez tenha sido inspirado no filme fictício ‘Chunnel’ que aparece no episódio “The Pool Guy” de Seinfeld, exibido em 1995
  • 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

    • De fato, ele contribuiu com o projeto chocolate-quake e também abriu um bug report
      Eu também gostaria de receber ajuda para resolver problemas de OpenGL no meu fork de chocolate Doom 3 BFG
    • Parece mesmo que ele está seguindo por esse caminho
      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

    • DOOM oferecia multiplayer via serial desde dezembro de 1993, e em 1994 já suportava rede IPX
      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
    • Hoje em dia, problemas de NAT são resolvidos com servidores STUN ou com o Steam Datagram Relay da Steam
      É como uma espécie de Hamachi embutido no motor do jogo
    • Fico me perguntando se haveria alguma forma de fazer isso hoje com Tailscale, tão facilmente quanto antigamente
    • Na verdade, ainda dá para fazer só com port forwarding no roteador
      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

    • Naquele tempo, redes eram algo mais voltado ao ambiente corporativo, então instalar isso em casa era quase um hobby de nicho
      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 ping existia
      Fico curioso sobre o que acontece hoje no Windows 11 se você instalar sem rede
    • Na época do Windows 3.1, eu usava Trumpet Winsock
    • Também havia comentários de que a pilha TCP/IP do Windows 95 tinha sido trazida do FreeBSD
  • Até hoje, meu tutorial de DJGPP/NASM que escrevi 25 anos atrás ainda aparece no Google