11 Punkte von GN⁺ 2025-11-19 | 4 Kommentare | Auf WhatsApp teilen
  • 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

 
bungker 2025-11-21

Damals galt John Carmack als ein Entwicklergenie unter den Genies.

 
thinkpad 2025-11-20

Es hat mir wirklich Spaß gemacht, diesen guten Artikel zu lesen.

 
ipuris 2025-11-20

Haha, lustig.

 
GN⁺ 2025-11-19
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.

    • Diese Parallelport-Soundkarte war eine ganze Weile meine Standard-Soundkarte.
      Ich habe bei Maplin einen Haufen großer Widerstände gekauft und alles ziemlich schlampig zusammengelötet, aber es funktionierte auf Anhieb perfekt.
    • Ich durfte keinen Lötkolben benutzen, also habe ich einfach ein normales serielles Kabel aufgeschnitten und zu einem Nullmodem umgebaut.
      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.
    • Ich habe in derselben Zeit ebenfalls löten gelernt.
      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.

    • DJGPP hatte damals eine ziemlich große Community, und ein großer Teil der Quake-Optimierung geht auch auf Charles Sandmann zurück.
      Er ist der Autor von CWSDPMI und hat direkt mit id zusammengearbeitet.
    • Ich meine mich auch zu erinnern, dass es tatsächlich Kommunikation rund um CWSDPMI zwischen den beiden gab.
      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 würde wirklich gern ein Interview mit DJ Delorie sehen.
    • Ich habe seine Website angesehen und gesehen, dass er im Studium einen Schießkurs belegt hatte.
      Ich frage mich, ob solche Sportkurse in den USA üblich sind.
    • Dank DJGPP habe ich überhaupt erst programmieren gelernt.
  • Der Name „Chunnel“ stammt vermutlich vom Channel Tunnel.

    • Oder vielleicht war er von dem fiktiven Film „Chunnel“ aus der Seinfeld-Episode „The Pool Guy“ von 1995 inspiriert.
  • 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.

    • Tatsächlich hat er zum chocolate-quake-Projekt beigetragen und auch einen Bug-Report eingereicht.
      Ich würde mir ebenfalls wünschen, bei meinem chocolate Doom 3 BFG fork Hilfe bei der Lösung von OpenGL-Problemen zu bekommen.
    • Vermutlich entwickelt es sich in diese Richtung.
      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.

    • DOOM unterstützte seit Dezember 1993 seriellen Multiplayer, und 1994 kam IPX-Networking hinzu.
      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.
    • Heute löst man NAT-Probleme mit STUN-Servern oder Steams Steam Datagram Relay.
      Das ist im Grunde eine Art Hamachi direkt in der Engine.
    • Ich frage mich, ob es mit Tailscale vielleicht wieder so einfach geht wie früher.
    • Eigentlich reicht auch Port-Forwarding im Router.
      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.

    • Netzwerke waren damals vor allem ein Thema für Unternehmen, daher war die Installation zu Hause fast schon ein nerdiges Hobby.
      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.
    • Zu Windows-3.1-Zeiten benutzte man Trumpet Winsock.
    • Es gab auch Gerüchte, dass der TCP/IP-Stack von Windows 95 aus FreeBSD übernommen wurde.
  • Noch heute taucht mein DJGPP/NASM-Tutorial von vor 25 Jahren in der Google-Suche auf.