- Das 1996 veröffentlichte Quake traf gleichzeitig auf drei technologische Umbrüche: 3D-Beschleuniger, das Internet und den Übergang von MS-DOS zu Windows 95
- id Software nutzte den
djgpp-Compiler und eine DPMI-kompatible Struktur, um eine einzelne ausführbare Datei zu bauen, die sowohl unter DOS als auch unter Windows 95 läuft
- Über das „Chunnel“-System von Mpath wurde umgesetzt, dass die DOS-Version von Quake auf den Winsock-TCP/IP-Stack von Windows 95 zugreifen kann
- Diese Struktur bestand aus Komponenten wie
quakeudp.dll, genvxd.dll und mgenvxd.vxd und vermittelte, damit die DOS-Executable mit der Win32-Netzwerk-API kommunizieren konnte
- Später verschwand diese komplexe Struktur, als id Software auf reine Win32-Executables (WinQuake, GLQuake) umstieg
Quake und die Phase des Betriebssystemwechsels
- Zwischen 1996 und 1997 halbierte sich der Marktanteil von MS-DOS, während Microsoft den Umstieg auf Windows 95 und NT vorantrieb
- Einige Entwicklerstudios, etwa Blizzard North, entwickelten Spiele ausschließlich für Windows 95, doch id Software unterstützte mit einer einzigen Executable (
quake.exe) sowohl DOS als auch Windows
quake.exe war so entworfen, dass es den DPMI-Client von DJGPP nutzte und sowohl mit cwsdpmi.exe unter DOS als auch mit dem DPMI-Server von Windows 95 kompatibel war
- Microsoft-Ingenieur Raymond Chen beschrieb dies als ein „erstaunliches Beispiel dafür, dass ein Programm in heterogenen Extendern korrekt funktioniert“
Quake unter DOS ausführen
- Um Quake unter DOS zu starten, werden nur vier Dateien benötigt:
quake.exe, config.cfg, pak0.pak und cwsdpmi.exe
- Multiplayer unterstützte vier Methoden: Modem, NullModem, IPX und TCP/IP
- IPX war für LAN gedacht, TCP/IP für das Internet, doch DOS brachte standardmäßig keinen TCP/IP-Stack mit
- Der einzige DOS-TCP/IP-TSR war BWNFS von Beame & Whiteside, mit einem Preis von 395 US-Dollar (Stand 1996) ausgesprochen teuer
Ausführung unter Windows 95
- Wird
quake.exe in der virtuellen DOS-Box (dos-box) von Windows 95 ausgeführt, funktioniert es auf dieselbe Weise
- Da der DPMI-Server von Windows 95 genutzt wird, ist
cwsdpmi.exe nicht erforderlich
- Die Ausführung lief reibungslos, erforderte jedoch mindestens 16 MB RAM und hatte mehr Speicher-Overhead als unter DOS
- Der direkte VGA-Zugriff war erlaubt, sodass auch im Vollbildmodus keine Leistungseinbußen auftraten
q95.bat und Mpaths Chunnel
q95.bat ist nicht nur ein Skript zum Starten von Quake, sondern aktiviert über Mpaths Winsock-Tunneling-System (Chunnel) auch die TCP/IP-Verbindung
- Mpath Interactive betrieb den Online-Gaming-Dienst Mplayer und unterstützte Internetspiele für mehrere Titel, darunter Quake und Unreal
- Der damalige Mpath-Ingenieur Larry Hastings erzählte, wie er mit frühen Quake-Builds Internet-Deathmatches gegen das id-Software-Team spielte
- Mpath erhielt den Quellcode von Quake, passte ihn für die Kommunikation mit dem Netzwerk-Stack von Mplayer an und lizenzierte die Chunnel-Technologie an id
Technische Struktur von Chunnel
q95.bat startet qlaunch.exe, das quakeudp.dll lädt
quakeudp.dll fungiert als Brücke zu Winsock (wsock32.dll)
- Über
genvxd.dll wird der virtuelle Gerätetreiber mgenvxd.vxd geladen, der per Interrupt 0x48 mit Win32 kommuniziert
- Quakes BSD-Socket-Implementierung (
mpplc.c) stammt aus von Mpath bereitgestelltem Code und leitet Netzwerkaufrufe über Software-Interrupts weiter
genvxd.dll unmarshalt diese Aufrufe und leitet sie an Winsock weiter
- In den Symbolen von
mgenvxd.vxd taucht der Name John Cash auf
- Diese Technik war eine proprietäre, patentierte Technologie von Mpath, ihr Quellcode wurde nicht veröffentlicht
- Nachdem id Software ab Dezember 1996 auf reine Win32-Executables (WinQuake, GLQuake, QuakeWorld) umstieg, wurde die Chunnel-Struktur aufgegeben
Fazit
- Die TCP/IP-Unterstützung von Quake wurde durch eine originelle Struktur realisiert, bei der die DOS-Executable indirekt den Netzwerk-Stack von Windows 95 aufruft
- Es handelte sich um eine Hybridtechnik, die an der Grenze zwischen DOS und Windows funktionierte und ein Beispiel für die Übergangsphase des Game-Networking Mitte der 1990er Jahre ist
- Später wurde alles durch den Wechsel zu reinem Win32 vereinfacht, doch damals stand diese Struktur sinnbildlich für die technischen Herausforderungen und Innovationen einer Betriebssystem-Übergangszeit
4 Kommentare
Damals galt John Carmack als ein Entwicklergenie unter den Genies.
Es hat mir wirklich Spaß gemacht, diesen guten Artikel zu lesen.
Haha, lustig.
Hacker-News-Kommentare
Das erinnert mich an die Zeit, als ich selbst mit DJGPP und DPMI experimentiert habe.
Damals fühlte sich das wirklich wie Technologie aus der Zukunft an.
Besonders bei Star Wars: Dark Forces waren die Ladezeiten so langsam, dass ich DOS/4GW durch einen anderen DOS-Extender ersetzt habe — und überraschenderweise wurde es 3- bis 5-mal schneller.
Vermutlich lag das daran, dass der neue Extender die Disk-Hardware direkt im Protected Mode angesprochen hat, ohne in den Real Mode zurückzuwechseln.
In den frühen Linux-Tagen, als es noch kein Networking gab, nutzte man den KA9Q-TCP/IP-Stack.
KA9Q-Code-Link
Er lief unter DOS, ließ sich aber leicht auf Linux portieren.
Ich habe vor Kurzem auch wieder einen CWSDPMI-Client benutzt; damit laufen 32-Bit-Programme sowohl unter DOS als auch unter Windows.
CWSDPMI-Wiki
Als Kind habe ich löten gelernt, um mir selbst ein Nullmodem-Kabel zu bauen.
Später habe ich dann entdeckt, dass es Widerstände gibt, und mir eine Parallelport-Soundkarte gebaut, die Covox Speech Thing.
Das waren wirklich großartige Zeiten.
Ich habe bei Maplin einen Haufen großer Widerstände gekauft und alles ziemlich schlampig zusammengelötet, aber es funktionierte auf Anhieb perfekt.
Das war dafür gedacht, mit Freunden OMF2097 zu spielen, und es war großartig, nicht mehr um eine einzige Tastatur kämpfen zu müssen.
Mit selbstgebauter Hardware Mod-Dateien abzuspielen und sie über tragbare Lautsprecher zu hören, war einfach fantastisch.
Als ich später Fluxmittel entdeckte, wurde Löten deutlich einfacher.
Beim Ausdruck „DJGPP-Ingenieure“ musste ich daran denken, dass das im Grunde eine einzige Person, DJ Delorie, war.
Die komplette GCC-Toolchain nach DOS/Windows zu portieren, war wirklich eine gewaltige Leistung.
Ich weiß nicht, ob er auf Wunsch von id Software Funktionen ergänzt hat oder einfach aus Spaß daran, aber es ist beeindruckend.
Er ist der Autor von CWSDPMI und hat direkt mit id zusammengearbeitet.
Bei einem Open-Source-Projekt klingt diese Formulierung etwas seltsam, aber es dürfte stimmen.
Und dass Leute überrascht sind, dass Quake in einer VM läuft, liegt vermutlich daran, dass sie den VM86-Modus nicht kennen.
Ich frage mich, ob solche Sportkurse in den USA üblich sind.
Der Name „Chunnel“ stammt vermutlich vom Channel Tunnel.
Ich erinnere mich noch daran, wie ich früher TECHINFO.TXT gelesen habe, um TCP/IP-Multiplayer in Quake einzurichten.
Dort stand, dass der Beame-&-Whiteside-TCP/IP-Stack verwendet wurde.
Ich habe die Software von ftp.cdrom.com besorgt und installiert, aber damals hatte ich zu wenig Networking-Kenntnisse, weshalb die Einrichtung sehr schwierig war.
Letztlich waren Latenz und Performance so schlecht, dass NetQuake unter WinQuake deutlich besser lief.
Ich habe den Eindruck, dass Fabian begonnen hat, zu Quake zu recherchieren.
Ich würde mir ebenfalls wünschen, bei meinem chocolate Doom 3 BFG fork Hilfe bei der Lösung von OpenGL-Problemen zu bekommen.
Aber Quake ist eine deutlich komplexere Welt als Doom, daher lässt sich das kaum einfach in einem einzelnen Buch abhandeln.
In den 90ern konnte man einfach die Telefonnummer eines Freundes wählen und per Modem-Verbindung problemlos Quake oder Doom im Multiplayer spielen.
Heute ist das ohne Server fast unmöglich — ironischerweise.
TCP/IP gab es anfangs nicht, aber später löste der iDOOM-TCP-Treiber das Problem.
Als ich das im Studentenwohnheim getestet habe, fühlte es sich wirklich revolutionär an.
Das ist im Grunde eine Art Hamachi direkt in der Engine.
Allerdings blockieren Spielefirmen heute oft private Server, um mit dem Verkauf von Skins Geld zu verdienen.
Valve ist eine Ausnahme und erlaubt weiterhin benutzerdefinierte TF2-Server, und auch in Minecraft kann man nach wie vor die Authentifizierung deaktivieren und mit Freunden spielen.
Als Windows 95 TCP/IP integriert mitbrachte, endete die Zeit, in der man TCP noch separat installieren musste.
Mit der Verbreitung von Netzwerkkarten für Endverbraucher änderte sich die Welt.
Windows installierte TCP/IP allerdings nicht, wenn keine Netzwerkkarte vorhanden war, und es gab nicht einmal den
ping-Befehl.Ich frage mich, wie sich Windows 11 heute bei einer Installation ohne Netzwerk verhält.
Noch heute taucht mein DJGPP/NASM-Tutorial von vor 25 Jahren in der Google-Suche auf.