11 points par GN⁺ 2025-11-19 | 4 commentaires | Partager sur WhatsApp
  • Sorti en 1996, Quake a coïncidé avec trois bouleversements technologiques à la fois : les accélérateurs 3D, Internet et la transition de MS-DOS vers Windows 95
  • Pour créer un exécutable unique capable de fonctionner à la fois sous DOS et sous Windows 95, id Software a exploité le compilateur djgpp et une architecture compatible DPMI
  • Grâce au système « Chunnel » de Mpath, Quake pour DOS pouvait accéder à la pile TCP/IP Winsock de Windows 95
  • Cette architecture reposait sur des composants comme quakeudp.dll, genvxd.dll et mgenvxd.vxd, qui faisaient l’intermédiaire pour permettre à l’exécutable DOS de communiquer avec l’API réseau Win32
  • Plus tard, quand id Software est passé à des exécutables uniquement Win32 (WinQuake, GLQuake), cette structure complexe a disparu

Quake à l’heure du basculement entre systèmes d’exploitation

  • Entre 1996 et 1997, la part de marché de MS-DOS a été divisée par deux, tandis que Microsoft poussait la transition vers Windows 95 et NT
  • Certains studios (comme Blizzard North) développaient des jeux réservés à Windows 95, mais id Software a choisi de prendre en charge DOS et Windows avec un seul exécutable (quake.exe)
  • quake.exe a été conçu pour être compatible avec le client DPMI de DJGPP, que ce soit via cwsdpmi.exe sous DOS ou via le serveur DPMI de Windows 95
  • L’ingénieur Microsoft Raymond Chen a décrit cela comme « un exemple étonnant d’un programme qui fonctionne correctement sur des extenders hétérogènes »

L’exécution de Quake sous DOS

  • Pour lancer Quake sous DOS, quatre fichiers suffisaient : quake.exe, config.cfg, pak0.pak et cwsdpmi.exe
  • Le multijoueur prenait en charge quatre modes : modem, NullModem, IPX et TCP/IP
    • IPX servait au LAN, TCP/IP à Internet, mais DOS n’intégrait pas de pile TCP/IP par défaut
  • Le seul TSR TCP/IP pour DOS était BWNFS de Beame & Whiteside, vendu 395 dollars (en 1996), ce qui le rendait très coûteux

L’exécution sous Windows 95

  • En lançant quake.exe dans la boîte DOS virtuelle (dos-box) de Windows 95, le jeu fonctionnait de la même manière
  • Comme il utilisait le serveur DPMI de Windows 95, cwsdpmi.exe n’était pas nécessaire
  • L’exécution était fluide, mais 16 Mo de RAM ou plus étaient requis, avec davantage de surcharge mémoire que sous DOS
  • L’accès VGA direct était autorisé, ce qui permettait une exécution en plein écran sans perte de performances

q95.bat et le Chunnel de Mpath

  • q95.bat n’était pas un simple script de lancement de Quake : il activait la connexion TCP/IP via le système de tunnel Winsock (Chunnel) de Mpath
  • Mpath Interactive exploitait un service de jeu en ligne (Mplayer) prenant en charge le jeu sur Internet pour plusieurs titres, dont Quake et Unreal
  • Larry Hastings, ingénieur chez Mpath à l’époque, a raconté qu’il avait disputé des deathmatchs Internet avec l’équipe d’id Software sur des builds initiaux de Quake
  • Mpath a reçu le code source de Quake, l’a modifié pour communiquer avec la pile réseau de Mplayer, puis a concédé sous licence à id la technologie Chunnel

L’architecture technique de Chunnel

  • q95.bat lance qlaunch.exe, qui charge quakeudp.dll
    • quakeudp.dll sert de pont avec Winsock (wsock32.dll)
    • Via genvxd.dll, il charge le pilote de périphérique virtuel mgenvxd.vxd et communique avec Win32 par l’interruption 0x48
  • L’implémentation BSD sockets de Quake (mpplc.c) est du code fourni par Mpath, et transmet les appels réseau via des interruptions logicielles
  • genvxd.dll désérialise (unmarshalling) ces appels pour les transmettre à Winsock
  • Les symboles de mgenvxd.vxd contiennent le nom de John Cash
  • Cette technologie relevait d’un brevet propriétaire de Mpath et son code source n’a pas été publié
  • Après décembre 1996, quand id Software est passé à des exécutables purement Win32 (WinQuake, GLQuake, QuakeWorld), l’architecture Chunnel a été abandonnée

Conclusion

  • La prise en charge de TCP/IP dans Quake reposait sur une architecture inventive où un exécutable DOS appelait indirectement la pile réseau de Windows 95
  • C’était une technologie hybride fonctionnant à la frontière entre DOS et Windows, représentative de la période de transition du networking dans les jeux au milieu des années 1990
  • La suite a été simplifiée avec le passage au tout-Win32, mais cette solution reste emblématique des défis techniques et des innovations d’une transition entre systèmes d’exploitation

4 commentaires

 
bungker 2025-11-21

À cette époque, John Carmack était vraiment un génie parmi les génies du développement.

 
thinkpad 2025-11-20

J’ai vraiment pris beaucoup de plaisir à lire ce bon article.

 
ipuris 2025-11-20

Haha, c'est amusant.

 
GN⁺ 2025-11-19
Avis Hacker News
  • Ça me rappelle l’époque où je faisais des expérimentations directement avec DJGPP et DPMI
    À l’époque, ça donnait vraiment l’impression d’une technologie du futur
    En particulier, en jouant à Star Wars: Dark Forces, les temps de chargement étaient tellement lents que j’ai essayé de remplacer DOS/4GW par un autre extendeur DOS, et, de façon surprenante, c’était 3 à 5 fois plus rapide
    C’était probablement parce que le nouvel extendeur appelait directement le matériel disque en mode protégé sans repasser en mode réel

  • Aux débuts de Linux, à l’époque où il n’y avait pas encore de réseau, on utilisait la pile TCP/IP KA9Q
    Lien vers le code KA9Q
    Ça fonctionnait sous DOS, mais c’était facile à porter vers Linux
    J’ai aussi réessayé récemment le client CWSDPMI, qui permet à des programmes 32 bits de fonctionner à la fois sous DOS et Windows
    Wiki CWSDPMI

  • Si j’ai appris la soudure quand j’étais petit, c’était pour fabriquer moi-même un câble null modem
    Ensuite, j’ai découvert l’existence des résistances, et j’ai même bricolé moi-même une Covox Speech Thing, une carte son pour port parallèle
    C’était vraiment une belle époque

    • Cette carte son sur port parallèle a été ma carte son principale pendant un moment
      J’avais acheté un gros paquet de résistances chez Maplin et je les avais soudées assez grossièrement, mais ça a parfaitement marché du premier coup
    • On ne m’autorisait pas à utiliser un fer à souder, alors j’ai coupé un câble série standard pour le convertir en null modem
      Je l’avais fait pour jouer à OMF2097 avec des amis, et c’était génial de ne pas avoir à se battre pour un seul clavier
    • Moi aussi, j’ai appris la soudure à cette époque
      C’était vraiment impressionnant de lire des fichiers Mod avec un appareil fait maison et de les écouter sur des haut-parleurs portables
      Plus tard, quand j’ai découvert le flux, la soudure est devenue bien plus facile
  • L’expression « ingénieurs DJGPP » m’a rappelé qu’en réalité, c’était essentiellement une seule personne, DJ Delorie
    Porter toute la toolchain GCC vers DOS/Windows, c’était vraiment un exploit colossal
    Je ne sais pas s’il a ajouté ces fonctionnalités à la demande d’id Software ou simplement pour le plaisir, mais c’est admirable

    • À l’époque, DJGPP avait une communauté assez importante, et une bonne part du mérite de l’optimisation de Quake revient aussi à Charles Sandmann
      C’est l’auteur de CWSDPMI, et il a collaboré directement avec id
    • Il me semble aussi me souvenir qu’il y avait effectivement des échanges autour de CWSDPMI entre eux
      La formulation est un peu étrange pour un projet open source, mais c’est probablement exact
      Et si certains sont surpris que Quake tourne dans une VM, c’est sans doute parce qu’ils ne connaissent pas le mode VM86
    • J’aimerais vraiment voir une interview de DJ Delorie
    • J’ai regardé son site web, et j’y ai vu qu’à l’université il avait suivi un cours de tir
      Je me demande si ce genre d’activité sportive est courant aux États-Unis
    • C’est grâce à DJGPP que j’ai appris à programmer
  • Le nom « Chunnel » vient probablement du Channel Tunnel

    • Ou alors il a pu être inspiré par le film fictif « Chunnel » qui apparaît dans l’épisode « The Pool Guy » de Seinfeld, diffusé en 1995
  • Je me souviens avoir lu TECHINFO.TXT pour essayer de configurer le multijoueur TCP/IP de Quake
    Il y était indiqué qu’il utilisait la pile TCP/IP de Beame & Whiteside
    J’avais récupéré et installé le logiciel depuis ftp.cdrom.com, mais à l’époque je ne maîtrisais pas assez les réseaux, donc la configuration a été très difficile
    Au final, la latence était forte et les performances mauvaises, donc jouer à NetQuake avec WinQuake était bien préférable

  • J’ai l’impression que Fabian a commencé à faire des recherches autour de Quake

    • Il a effectivement contribué au projet chocolate-quake et a aussi laissé un rapport de bug
      J’aimerais aussi obtenir de l’aide sur mon fork de chocolate Doom 3 BFG pour résoudre des problèmes OpenGL
    • Il semble probablement s’orienter dans cette direction
      Mais Quake est un univers bien plus complexe que Doom, donc difficile à traiter entièrement dans un simple livre
  • Dans les années 1990, il suffisait d’une connexion modem au numéro de téléphone d’un ami pour jouer facilement à Quake ou Doom en multijoueur,
    et c’est ironique qu’aujourd’hui ce soit presque impossible sans serveur

    • DOOM prenait déjà en charge le multijoueur série à partir de décembre 1993, et en 1994 il gérait aussi le réseau IPX
      Il n’y avait pas de TCP/IP au début, mais cela a ensuite été résolu avec le pilote iDOOM TCP
      Quand je l’ai testé dans un dortoir universitaire, c’était vraiment révolutionnaire
    • Aujourd’hui, on contourne les problèmes de NAT avec des serveurs STUN ou le Steam Datagram Relay de Steam
      C’est une sorte de Hamachi intégré au moteur
    • Je me demande s’il n’y aurait pas moyen de refaire ça aussi simplement qu’autrefois avec Tailscale
    • En réalité, un simple port forwarding sur le routeur suffit aussi
      Mais aujourd’hui, beaucoup d’éditeurs bloquent les serveurs privés pour préserver les revenus liés à la vente de skins
      Valve fait figure d’exception en autorisant encore les serveurs personnalisés de TF2, et Minecraft permet toujours de désactiver l’authentification pour jouer entre amis
  • Quand Windows 95 a intégré TCP/IP, cela a mis fin à l’époque où il fallait installer TCP séparément

    • À l’époque, les réseaux étaient surtout orientés entreprise, donc l’installer chez soi relevait presque du hobby de passionné
      L’arrivée des cartes réseau dans le grand public a changé la donne
      Mais Windows n’installait pas TCP/IP sans carte réseau, et il n’y avait même pas de commande ping
      Je me demande ce qui se passe aujourd’hui avec Windows 11 si on l’installe sans réseau
    • Sous Windows 3.1, on utilisait Trumpet Winsock
    • On disait aussi que la pile TCP/IP de Windows 95 provenait de FreeBSD
  • Mon tutoriel DJGPP/NASM écrit il y a 25 ans apparaît encore dans les résultats Google