- 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
En esa época, John Carmack era un genio entre genios como desarrollador.
Me divertí mucho leyendo este buen artículo.
jaja, está divertido.
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
Compré un montón de resistencias grandes en Maplin y las soldé medio a lo bruto, pero funcionó perfectamente desde el primer intento
Lo hice para jugar OMF2097 con mis amigos, y estuvo buenísimo no tener que pelearse por un solo teclado
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
Él es el autor de CWSDPMI y colaboró directamente con id
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 da curiosidad si ese tipo de materia de educación física es común en Estados Unidos
El nombre “Chunnel” probablemente viene del Channel Tunnel
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
A mí también me gustaría recibir ayuda para resolver problemas de OpenGL en mi fork de chocolate Doom 3 BFG
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
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
Es una especie de Hamachi integrado en el motor
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
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
pingMe da curiosidad qué pasará hoy con Windows 11 si lo instalas sin red
Incluso hoy, el tutorial de DJGPP/NASM que escribí hace 25 años sigue apareciendo en búsquedas de Google