11 puntos por GN⁺ 2025-11-19 | 4 comentarios | Compartir por WhatsApp
  • Quake, lanzado en 1996, coincidió con tres cambios tecnológicos al mismo tiempo: los aceleradores 3D, Internet y la transición de MS-DOS a Windows 95
  • id Software aprovechó el compilador djgpp y una estructura compatible con DPMI para crear un único ejecutable capaz de correr tanto en DOS como en Windows 95
  • Mediante el sistema “Chunnel” de Mpath, lograron que Quake para DOS pudiera acceder a la pila TCP/IP Winsock de Windows 95
  • Esta arquitectura estaba compuesta por elementos como quakeudp.dll, genvxd.dll y mgenvxd.vxd, que servían de puente para que el ejecutable de DOS se comunicara con la API de red Win32
  • Más adelante, cuando id Software pasó a ejecutables exclusivos de Win32 (WinQuake, GLQuake), esta compleja estructura desapareció

Quake y la transición de sistemas operativos

  • Entre 1996 y 1997, la cuota de mercado de MS-DOS se redujo a la mitad, mientras Microsoft impulsaba la migración hacia Windows 95 y NT
  • Algunas desarrolladoras, como Blizzard North, crearon juegos exclusivos para Windows 95, pero id Software optó por dar soporte a DOS y Windows con un solo ejecutable (quake.exe)
  • quake.exe fue diseñado para ser compatible con el cliente DPMI de DJGPP, ya fuera usando cwsdpmi.exe en DOS o el servidor DPMI de Windows 95
  • El ingeniero de Microsoft Raymond Chen lo describió como “un caso asombroso en el que un programa funciona correctamente en extensores heterogéneos

Ejecutar Quake en un entorno DOS

  • Para ejecutar Quake en DOS, solo hacían falta cuatro archivos: quake.exe, config.cfg, pak0.pak y cwsdpmi.exe
  • El modo multijugador soportaba módem, NullModem, IPX y TCP/IP
    • IPX era para LAN y TCP/IP para Internet, pero DOS no traía una pila TCP/IP por defecto
  • El único TSR TCP/IP disponible para DOS era BWNFS de Beame & Whiteside, y su precio era muy alto: 395 dólares (en 1996)

Ejecución en Windows 95

  • Si se ejecutaba quake.exe dentro de la caja DOS virtual (dos-box) de Windows 95, funcionaba de la misma manera
  • Como utilizaba el servidor DPMI de Windows 95, cwsdpmi.exe no era necesario
  • La ejecución era fluida, pero requería al menos 16 MB de RAM y tenía más sobrecarga de memoria que en DOS
  • El acceso a VGA estaba permitido de forma directa, así que podía correr en pantalla completa sin pérdida de rendimiento

q95.bat y Chunnel de Mpath

  • q95.bat no era simplemente un script para lanzar Quake: activaba la conexión TCP/IP mediante el sistema de tunelización Winsock de Mpath (Chunnel)
  • Mpath Interactive operaba el servicio de juegos en línea Mplayer y soportaba partidas por Internet en varios juegos, incluidos Quake y Unreal
  • Larry Hastings, ingeniero de Mpath en ese entonces, contó que en los primeros builds de Quake llegó a jugar deathmatch por Internet con el equipo de id Software
  • Mpath recibió el código fuente de Quake, lo modificó para comunicarse con la pila de red de Mplayer, y luego licenció la tecnología Chunnel a id

La arquitectura técnica de Chunnel

  • q95.bat ejecuta qlaunch.exe, que a su vez carga quakeudp.dll
    • quakeudp.dll actúa como puente con Winsock (wsock32.dll)
    • A través de genvxd.dll, carga el controlador de dispositivo virtual mgenvxd.vxd y se comunica con Win32 mediante la interrupción 0x48
  • La implementación de sockets BSD de Quake (mpplc.c) era código proporcionado por Mpath, y redirigía las llamadas de red mediante interrupciones de software
  • genvxd.dll deserializaba (unmarshalling) esas llamadas y las reenviaba a Winsock
  • En los símbolos de mgenvxd.vxd aparece el nombre de John Cash
  • Esta tecnología era propietaria y patentada por Mpath, y su código fuente no fue publicado
  • Después de diciembre de 1996, cuando id Software migró a ejecutables exclusivos de Win32 (WinQuake, GLQuake, QuakeWorld), la estructura de Chunnel fue descartada

Conclusión

  • El soporte TCP/IP de Quake se implementó con una estructura original en la que un ejecutable de DOS invocaba indirectamente la pila de red de Windows 95
  • Fue una tecnología híbrida que operaba en la frontera entre DOS y Windows, y muestra claramente la etapa de transición del networking en juegos a mediados de los años 90
  • Más tarde todo se simplificó con la adopción de Win32, pero en su momento fue una muestra emblemática de los desafíos técnicos y la innovación durante una transición de sistema operativo

4 comentarios

 
bungker 2025-11-21

En esa época, John Carmack era un genio entre genios como desarrollador.

 
thinkpad 2025-11-20

Me divertí mucho leyendo este buen artículo.

 
ipuris 2025-11-20

jaja, está divertido.

 
GN⁺ 2025-11-19
Comentarios de Hacker News
  • Me hace recordar la época en que experimentaba directamente con DJGPP y DPMI
    En ese momento de verdad se sentía como una tecnología futurista
    En particular, mientras jugaba Star Wars: Dark Forces, los tiempos de carga eran tan lentos que probé cambiar DOS/4GW por otro extensor de DOS, y sorprendentemente se volvió entre 3 y 5 veces más rápido
    Probablemente porque el nuevo extensor llamaba directamente al hardware del disco en modo protegido sin cambiar a modo real

  • En los primeros días de Linux, cuando todavía no había networking, usábamos el stack TCP/IP KA9Q
    Enlace al código de KA9Q
    Corría en DOS, pero era fácil de portar a Linux
    Hace poco también probé el cliente CWSDPMI, que permite que programas de 32 bits funcionen tanto en DOS como en Windows
    Wiki de CWSDPMI

  • De niño aprendí a soldar porque quería hacer mi propio cable null-modem
    Después descubrí que existían las resistencias, e hice mi propia Covox Speech Thing, una tarjeta de sonido para puerto paralelo
    De verdad eran tiempos muy divertidos

    • Esa tarjeta de sonido por puerto paralelo fue durante un tiempo mi tarjeta de sonido principal
      Compré un montón de resistencias grandes en Maplin y las soldé medio a lo bruto, pero funcionó perfectamente desde el primer intento
    • Como no me dejaban usar cautín, corté un cable serial normal y lo modifiqué a null-modem
      Lo hice para jugar OMF2097 con mis amigos, y estuvo buenísimo no tener que pelearse por un solo teclado
    • Yo también aprendí a soldar en esa época
      Era increíble reproducir archivos Mod con un dispositivo hecho por mí y escucharlos en bocinas portátiles
      Más adelante descubrí el flux y soldar se volvió muchísimo más fácil
  • Al ver la expresión “ingenieros de DJGPP”, recordé que en realidad era prácticamente una sola persona: DJ Delorie
    Portar toda la toolchain de GCC a DOS/Windows fue un logro enorme
    No sé si añadió esa funcionalidad por petición de id Software o simplemente por diversión, pero es digno de admiración

    • En ese tiempo DJGPP tenía una comunidad bastante grande, y buena parte del mérito por la optimización de Quake también corresponde a Charles Sandmann
      Él es el autor de CWSDPMI y colaboró directamente con id
    • Yo también recuerdo que realmente hubo comunicación relacionada con CWSDPMI entre ambos
      Suena un poco raro decirlo de un proyecto open source, pero es muy probable que haya sido así
      Y que alguien se sorprenda de que Quake corra en una VM probablemente se deba a que no conoce el modo VM86
    • Me encantaría ver una entrevista con DJ Delorie
    • Revisé su sitio web y vi que en la universidad tomó una clase de tiro
      Me da curiosidad si ese tipo de materia de educación física es común en Estados Unidos
    • Aprendí a programar por primera vez gracias a DJGPP
  • El nombre “Chunnel” probablemente viene del Channel Tunnel

    • O quizá se inspiró en la película ficticia “Chunnel” que aparece en el episodio “The Pool Guy” de Seinfeld, emitido en 1995
  • Recuerdo haber leído TECHINFO.TXT cuando intentaba configurar el multijugador TCP/IP de Quake
    Ahí decía que usaba el stack TCP/IP de Beame & Whiteside
    Conseguí el software en ftp.cdrom.com y lo instalé, pero en ese entonces me faltaban conocimientos de redes, así que configurarlo fue muy difícil
    Al final había mucha latencia y el rendimiento era malo, así que era mucho mejor jugar NetQuake con WinQuake

  • Me da la impresión de que Fabian empezó a hacer investigación relacionada con Quake

    • De hecho contribuyó al proyecto chocolate-quake y también dejó un reporte de bug
      A mí también me gustaría recibir ayuda para resolver problemas de OpenGL en mi fork de chocolate Doom 3 BFG
    • Parece que sí va en esa dirección
      Pero Quake es un mundo mucho más complejo que Doom, así que sería difícil abarcarlo todo en un solo libro
  • En los 90, bastaba con marcar por módem al número de teléfono de un amigo para jugar Quake o Doom en multijugador,
    y ahora es irónico que sin servidores sea casi imposible

    • DOOM soportaba multijugador por serial desde diciembre de 1993, y en 1994 ya permitía networking por IPX
      Al principio no tenía TCP/IP, pero más tarde eso se resolvió con el driver TCP de iDOOM
      Cuando lo probé en la residencia universitaria fue realmente revolucionario
    • Hoy en día se resuelven los problemas de NAT con servidores STUN o con Steam Datagram Relay de Steam
      Es una especie de Hamachi integrado en el motor
    • Me pregunto si habrá alguna forma de hacerlo tan fácil como antes usando Tailscale
    • En realidad, con solo hacer port forwarding en el router ya se puede
      Solo que hoy muchas compañías bloquean los servidores personales para ganar dinero vendiendo skins
      Valve ha sido una excepción al permitir servidores personalizados de TF2, y Minecraft todavía deja desactivar la autenticación para jugar con amigos
  • Cuando Windows 95 trajo TCP/IP integrado, terminó la época en que había que instalar TCP por separado

    • En ese tiempo las redes estaban orientadas sobre todo a empresas, así que instalarlo en casa era casi un hobby de nicho
      El mundo cambió cuando las tarjetas de red se volvieron comunes para consumidores
      Aun así, Windows no instalaba TCP/IP si no había tarjeta de red, y ni siquiera tenía el comando ping
      Me da curiosidad qué pasará hoy con Windows 11 si lo instalas sin red
    • En la época de Windows 3.1 usábamos Trumpet Winsock
    • También se decía que el stack TCP/IP de Windows 95 había sido tomado de FreeBSD
  • Incluso hoy, el tutorial de DJGPP/NASM que escribí hace 25 años sigue apareciendo en búsquedas de Google