- 1996 में जारी Quake एक ऐसा गेम था जिसने एक साथ तीन तकनीकी बदलावों का सामना किया: 3D accelerator, इंटरनेट, और MS-DOS से Windows 95 में संक्रमण
- id Software ने
djgpp compiler और DPMI-compatible structure का उपयोग करके ऐसी single executable file बनाई जो DOS और Windows 95 दोनों पर चल सके
- Mpath के ‘Chunnel’ system के ज़रिए DOS के लिए बने Quake को Windows 95 के Winsock TCP/IP stack तक पहुंचने योग्य बनाया गया
- यह संरचना
quakeudp.dll, genvxd.dll, mgenvxd.vxd जैसे components से बनी थी, जो DOS executable को Win32 network API से संवाद करने के लिए मध्यस्थता करते थे
- बाद में जब id Software Win32-only executable (WinQuake, GLQuake) पर चला गया, तो यह जटिल संरचना समाप्त हो गई
Quake और operating system संक्रमण काल
- 1996~1997 के बीच MS-DOS का market share आधा रह गया, और Microsoft ने Windows 95 और NT की ओर संक्रमण को आगे बढ़ाया
- कुछ developers, जैसे Blizzard North, ने Windows 95-only games बनाए, लेकिन id Software ने एक ही executable (
quake.exe) से DOS और Windows दोनों को support किया
quake.exe को DJGPP के DPMI client का उपयोग करते हुए इस तरह डिज़ाइन किया गया था कि वह DOS के cwsdpmi.exe या Windows 95 के DPMI server दोनों के साथ compatible रहे
- Microsoft engineer Raymond Chen ने इसे “ऐसा हैरान कर देने वाला उदाहरण जिसमें program अलग-अलग extenders पर भी सही चलता है” बताया
DOS environment में Quake चलाना
- DOS में Quake चलाने के लिए केवल
quake.exe, config.cfg, pak0.pak, और cwsdpmi.exe — ये चार files चाहिए थीं
- multiplayer में modem, NullModem, IPX, TCP/IP — चार तरीके support थे
- IPX LAN के लिए था, और TCP/IP इंटरनेट के लिए, लेकिन DOS में TCP/IP stack built-in नहीं था
- DOS के लिए उपलब्ध एकमात्र TCP/IP TSR Beame & Whiteside का BWNFS था, जिसकी कीमत 395 डॉलर (1996 के हिसाब से) थी, यानी बहुत महंगा
Windows 95 environment में चलना
- Windows 95 के virtual DOS box (dos-box) में
quake.exe चलाने पर यह उसी तरह काम करता था
- क्योंकि यह Windows 95 के DPMI server का उपयोग करता था, इसलिए
cwsdpmi.exe की जरूरत नहीं पड़ती थी
- चलना सुचारु था, लेकिन 16MB या उससे अधिक RAM चाहिए थी, और DOS की तुलना में memory overhead ज़्यादा था
- VGA access सीधे अनुमति होने से full-screen में भी performance गिरावट के बिना चलना संभव था
q95.bat और Mpath का Chunnel
q95.bat सिर्फ Quake चलाने वाली script नहीं थी, बल्कि Mpath के Winsock tunneling system (Chunnel) के ज़रिए TCP/IP connection को सक्रिय करती थी
- Mpath Interactive online gaming service (Mplayer) चलाती थी और Quake व Unreal सहित कई games के internet play को support करती थी
- उस समय Mpath engineer Larry Hastings ने एक घटना साझा की थी, जिसमें उन्होंने Quake के शुरुआती build पर id Software team के साथ internet deathmatch खेला
- Mpath ने Quake का source code लेकर उसे Mplayer network stack से संवाद करने लायक बदला, और Chunnel technology को id को license किया
Chunnel की तकनीकी संरचना
q95.bat qlaunch.exe चलाता था, जो quakeudp.dll को load करता था
quakeudp.dll Winsock (wsock32.dll) के साथ bridge का काम करता था
- यह
genvxd.dll के माध्यम से virtual device driver mgenvxd.vxd को load करता था, और interrupt 0x48 के ज़रिए Win32 से संवाद करता था
- Quake का BSD socket implementation (
mpplc.c) Mpath द्वारा दिया गया code था, जो software interrupt के माध्यम से network calls भेजता था
genvxd.dll इन calls को unmarshalling करके Winsock तक पहुंचाता था
mgenvxd.vxd के symbols में John Cash का नाम शामिल है
- यह तकनीक Mpath की proprietary patented technology थी, इसलिए source code सार्वजनिक नहीं है
- दिसंबर 1996 के बाद, जब id Software Win32-only executable (WinQuake, GLQuake, QuakeWorld) पर गया, तो Chunnel संरचना को हटा दिया गया
निष्कर्ष
- Quake का TCP/IP support ऐसी अनोखी संरचना से लागू किया गया था जिसमें DOS executable, Windows 95 के network stack को अप्रत्यक्ष रूप से call करता था
- यह DOS और Windows की सीमा पर काम करने वाली hybrid technology थी, जो 1990 के दशक के मध्य के game networking संक्रमण काल का उदाहरण दिखाती है
- बाद में Win32-only होने से चीजें सरल हो गईं, लेकिन उस समय यह operating system संक्रमण काल की तकनीकी चुनौती और innovation का प्रतीक थी
4 टिप्पणियां
उस दौर में John Carmack को डेवलपरों में भी जीनियस का जीनियस माना जाता था।
अच्छा लेख पढ़कर मुझे सच में बहुत मज़ा आया।
हाहा, मज़ेदार है।
Hacker News टिप्पणियाँ
पुराने DJGPP और DPMI के साथ सीधे प्रयोग करने वाले दिन याद आ गए
उस समय यह सचमुच भविष्य की तकनीक जैसा लगता था
खासकर Star Wars: Dark Forces खेलते समय लोडिंग बहुत धीमी थी, तो मैंने DOS/4GW को किसी दूसरे DOS extender से बदलकर देखा, और हैरानी की बात है कि वह 3~5 गुना तेज़ हो गया
शायद इसलिए कि नया extender real mode में स्विच किए बिना protected mode में सीधे disk hardware को call कर रहा था
Linux के शुरुआती दिनों में, जब networking नहीं थी, तब KA9Q TCP/IP stack का इस्तेमाल किया जाता था
KA9Q code link
यह DOS पर चलता था, लेकिन Linux पर आसानी से port किया जा सकता था
हाल ही में मैंने CWSDPMI client भी आज़माया, जो 32-bit programs को DOS और Windows दोनों पर चलने देता है
CWSDPMI wiki
बचपन में soldering सीखने की वजह null modem cable खुद बनाना था
बाद में resistors के बारे में पता चला, और parallel port के लिए sound card Covox Speech Thing भी खुद बनाकर देखा
वह सचमुच बहुत मज़ेदार समय था
Maplin से ढेर सारे बड़े resistors खरीदे, बहुत ही ढीले-ढाले तरीके से soldering की, लेकिन वह शुरू से ही पूरी तरह काम कर गया
यह दोस्तों के साथ OMF2097 खेलने के लिए बनाया था, और अच्छा यह था कि एक ही keyboard के लिए लड़ना नहीं पड़ता था
अपने हाथ से बनाए डिवाइस पर Mod files चलाकर portable speaker से सुनना बहुत शानदार लगता था
बाद में flux के बारे में जानने के बाद soldering बहुत आसान हो गई
“DJGPP engineers” वाला वाक्य देखकर याद आया कि असल में यह लगभग एक ही व्यक्ति, DJ Delorie, था
पूरे GCC toolchain को DOS/Windows पर port करना सचमुच बहुत बड़ी उपलब्धि थी
पता नहीं उसने id Software के अनुरोध पर features जोड़े थे, या सिर्फ मज़े के लिए, लेकिन यह बेहद प्रशंसनीय है
वह CWSDPMI के लेखक थे, और id के साथ सीधे काम कर रहे थे
open source project के लिए यह अभिव्यक्ति थोड़ी अजीब लगती है, लेकिन सच होने की पूरी संभावना है
और जो लोग यह देखकर चकित होते हैं कि Quake VM में चल रहा था, शायद वे VM86 mode के बारे में नहीं जानते
सोचता हूँ, क्या अमेरिका में ऐसे physical education courses आम हैं
“Chunnel” नाम शायद Channel Tunnel से लिया गया होगा
मुझे याद है कि पहले Quake के TCP/IP multiplayer को सेट करने के लिए TECHINFO.TXT पढ़ा था
उसमें लिखा था कि यह Beame & Whiteside TCP/IP stack का इस्तेमाल करता है
मैंने ftp.cdrom.com से software लाकर install किया, लेकिन उस समय networking knowledge की कमी के कारण configuration बहुत मुश्किल थी
आखिरकार latency बहुत ज़्यादा थी और performance भी खराब, इसलिए WinQuake पर NetQuake खेलना कहीं बेहतर था
लगता है Fabian ने Quake-related research शुरू कर दी है
मैं भी अपने chocolate Doom 3 BFG fork में OpenGL समस्याएँ सुलझाने में उसकी मदद पाना चाहूँगा
लेकिन Quake, Doom की तुलना में कहीं ज़्यादा जटिल दुनिया है, इसलिए उसे सिर्फ एक किताब में समेटना मुश्किल है
90 के दशक में सिर्फ दोस्त का फ़ोन नंबर लेकर modem connection कर दो, और Quake या Doom आसानी से multiplayer में खेल सकते थे,
आज यह विडंबना है कि server के बिना यह लगभग असंभव हो गया है
शुरुआत में TCP/IP नहीं था, लेकिन बाद में iDOOM TCP driver से यह संभव हुआ
जब इसे university dorm में test किया था, तब यह सचमुच क्रांतिकारी लगा
यह किसी तरह के engine के अंदर Hamachi जैसा कॉन्सेप्ट है
बस आजकल कई game companies skin sales revenue के लिए personal servers को रोकती हैं
Valve ने अपवाद के रूप में TF2 custom servers की अनुमति दी, और Minecraft में भी अभी authentication बंद करके दोस्तों के साथ खेला जा सकता है
Windows 95 में TCP/IP built-in आने के बाद वह दौर खत्म हो गया जब TCP अलग से install करना पड़ता था
network cards जब consumer स्तर पर आने लगे, तब दुनिया बदल गई
लेकिन Windows network card के बिना TCP/IP install नहीं करता था, और ping command भी नहीं होती थी
सोचता हूँ, आज के Windows 11 में अगर network के बिना install करें तो क्या होगा
25 साल पहले मैंने जो DJGPP/NASM tutorial लिखा था, वह आज भी Google search में दिख जाता है