- 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
À cette époque, John Carmack était vraiment un génie parmi les génies du développement.
J’ai vraiment pris beaucoup de plaisir à lire ce bon article.
Haha, c'est amusant.
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
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
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
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
C’est l’auteur de CWSDPMI, et il a collaboré directement avec id
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
Je me demande si ce genre d’activité sportive est courant aux États-Unis
Le nom « Chunnel » vient probablement du Channel Tunnel
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
J’aimerais aussi obtenir de l’aide sur mon fork de chocolate Doom 3 BFG pour résoudre des problèmes OpenGL
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
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
C’est une sorte de Hamachi intégré au moteur
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’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
pingJe me demande ce qui se passe aujourd’hui avec Windows 11 si on l’installe sans réseau
Mon tutoriel DJGPP/NASM écrit il y a 25 ans apparaît encore dans les résultats Google