- Quake ที่ออกวางจำหน่ายในปี 1996 เผชิญกับการเปลี่ยนแปลงทางเทคโนโลยี 3 ด้านพร้อมกัน ได้แก่ 3D accelerator, อินเทอร์เน็ต และ การเปลี่ยนผ่านจาก MS-DOS ไปสู่ Windows 95
- id Software ใช้คอมไพเลอร์
djgpp และโครงสร้างที่เข้ากันได้กับ DPMI เพื่อสร้าง ไฟล์รันได้ไฟล์เดียวที่ทำงานได้ทั้งบน DOS และ Windows 95
- ผ่าน ระบบ ‘Chunnel’ ของ Mpath ทำให้ Quake เวอร์ชัน DOS สามารถเข้าถึง Winsock TCP/IP stack ของ Windows 95 ได้
- โครงสร้างนี้ประกอบด้วยส่วนต่าง ๆ เช่น
quakeudp.dll, genvxd.dll, mgenvxd.vxd และทำหน้าที่เป็นตัวกลางให้ ไฟล์รันบน DOS สื่อสารกับ Win32 network API
- ต่อมาเมื่อ id Software เปลี่ยนไปใช้ ไฟล์รันแบบ Win32 โดยเฉพาะ (WinQuake, GLQuake) โครงสร้างที่ซับซ้อนนี้ก็หายไป
Quake กับช่วงเปลี่ยนผ่านของระบบปฏิบัติการ
- ระหว่างปี 1996~1997 ส่วนแบ่งตลาดของ MS-DOS ลดลงเหลือครึ่งหนึ่ง และ Microsoft ก็ผลักดันการย้ายไปสู่ Windows 95 และ NT
- ผู้พัฒนาบางราย (เช่น Blizzard North) สร้างเกมสำหรับ Windows 95 โดยเฉพาะ แต่ id Software รองรับทั้ง DOS และ Windows ด้วย ไฟล์เดียว (
quake.exe)
quake.exe ถูกออกแบบให้ใช้ DPMI client ของ DJGPP เพื่อให้เข้ากันได้ทั้ง cwsdpmi.exe บน DOS และ DPMI server ของ Windows 95
- วิศวกรของ Microsoft อย่าง Raymond Chen อธิบายว่านี่คือ “ตัวอย่างที่น่าทึ่งของโปรแกรมที่ทำงานได้ปกติบน extender ที่แตกต่างกัน”
การรัน Quake ในสภาพแวดล้อม DOS
- หากต้องการรัน Quake บน DOS ต้องใช้เพียง 4 ไฟล์คือ
quake.exe, config.cfg, pak0.pak, cwsdpmi.exe
- โหมดมัลติเพลเยอร์รองรับ 4 วิธี ได้แก่ modem, NullModem, IPX, TCP/IP
- IPX ใช้สำหรับ LAN ส่วน TCP/IP ใช้สำหรับอินเทอร์เน็ต แต่ DOS ไม่มี TCP/IP stack มาให้โดยปริยาย
- TCP/IP TSR สำหรับ DOS ที่มีอยู่แทบจะมีเพียง BWNFS ของ Beame & Whiteside ซึ่งมีราคาแพงมากที่ 395 ดอลลาร์ (ตามราคาในปี 1996)
การรันบน Windows 95
- เมื่อรัน
quake.exe ภายใน virtual DOS box (dos-box) ของ Windows 95 ก็จะทำงานในลักษณะเดียวกัน
- เพราะใช้ DPMI server ของ Windows 95 จึงไม่จำเป็นต้องมี
cwsdpmi.exe
- แม้จะรันได้ราบรื่น แต่ ต้องการ RAM อย่างน้อย 16MB และมี memory overhead มากกว่า DOS
- การเข้าถึง VGA ได้โดยตรง ทำให้ รันแบบเต็มจอได้โดยไม่มีประสิทธิภาพตกลง
q95.bat และ Chunnel ของ Mpath
q95.bat ไม่ใช่แค่สคริปต์สำหรับเปิด Quake เท่านั้น แต่ยังเปิดใช้งานการเชื่อมต่อ TCP/IP ผ่าน ระบบ Winsock tunneling (Chunnel) ของ Mpath
- Mpath Interactive ให้บริการ เกมออนไลน์ (Mplayer) และรองรับการเล่นผ่านอินเทอร์เน็ตสำหรับหลายเกม รวมถึง Quake และ Unreal
- Larry Hastings วิศวกรของ Mpath ในเวลานั้นเล่าว่า เขาเคยเล่น internet deathmatch กับทีม id Software โดยใช้บิลด์แรก ๆ ของ Quake
- Mpath ได้รับซอร์สโค้ดของ Quake มาปรับแก้ให้ สื่อสารกับ network stack ของ Mplayer และให้สิทธิใช้งานเทคโนโลยี Chunnel แก่ id
โครงสร้างทางเทคนิคของ Chunnel
q95.bat จะเรียก qlaunch.exe ซึ่งทำหน้าที่ โหลด quakeudp.dll
quakeudp.dll ทำหน้าที่เป็น สะพานเชื่อมกับ Winsock (wsock32.dll)
- ผ่าน
genvxd.dll เพื่อโหลด virtual device driver mgenvxd.vxd และสื่อสารกับ Win32 ผ่าน interrupt 0x48
- การติดตั้ง BSD socket ของ Quake (
mpplc.c) เป็นโค้ดที่ Mpath จัดหาให้ และ ส่งคำสั่งเรียกเครือข่ายผ่าน software interrupt
genvxd.dll จะทำการ unmarshalling คำสั่งเหล่านี้แล้วส่งต่อไปยัง Winsock
- ในสัญลักษณ์ของ
mgenvxd.vxd มีชื่อของ John Cash รวมอยู่ด้วย
- เทคโนโลยีนี้เป็น เทคโนโลยีสิทธิบัตรแบบ proprietary ของ Mpath และไม่มีการเปิดเผยซอร์สโค้ด
- หลังเดือนธันวาคม 1996 เมื่อ id Software เปลี่ยนไปใช้ ไฟล์รันแบบ Win32 โดยเฉพาะ (WinQuake, GLQuake, QuakeWorld) โครงสร้าง Chunnel ก็ถูกยกเลิกไป
บทสรุป
- การรองรับ TCP/IP ของ Quake ถูกสร้างขึ้นด้วยโครงสร้างอันแยบยลที่ทำให้ ไฟล์รันบน DOS สามารถเรียกใช้ network stack ของ Windows 95 ทางอ้อมได้
- นี่คือ เทคโนโลยีแบบไฮบริดที่ทำงานอยู่ตรงรอยต่อระหว่าง DOS กับ Windows และเป็นตัวอย่างของช่วงเปลี่ยนผ่านของ game networking ในยุคกลางทศวรรษ 1990
- แม้ภายหลังจะถูกทำให้ง่ายขึ้นด้วยการไปสู่ Win32 โดยเฉพาะ แต่ในเวลานั้นมันคือสัญลักษณ์ของ ความท้าทายและนวัตกรรมทางเทคนิคในช่วงเปลี่ยนผ่านของระบบปฏิบัติการ
4 ความคิดเห็น
ในยุคนั้น ถ้าพูดถึง John Carmack ก็ต้องบอกว่าเป็นอัจฉริยะในหมู่อัจฉริยะของนักพัฒนาเลยครับ
ได้อ่านบทความดี ๆ แล้ว สนุกมากจริง ๆ ครับ
ฮ่าๆ สนุกดีนะ
ความคิดเห็นใน Hacker News
ทำให้นึกถึงสมัยก่อนที่ลองเล่นกับ DJGPP และ DPMI ด้วยตัวเอง
ตอนนั้นมันให้ความรู้สึกเหมือนเป็น เทคโนโลยีแห่งอนาคต จริง ๆ
โดยเฉพาะตอนเล่น Star Wars: Dark Forces แล้วเจอเวลาโหลดช้ามาก เลยลองเปลี่ยน DOS/4GW ไปเป็น DOS extender ตัวอื่น แล้วน่าทึ่งมากที่มันเร็วขึ้น 3–5 เท่า
น่าจะเป็นเพราะ extender ตัวใหม่ เรียกฮาร์ดแวร์ดิสก์จาก protected mode ได้โดยตรง โดยไม่ต้องสลับกลับไป real mode
ในยุคแรก ๆ ของ Linux ตอนที่ยังไม่มีระบบเครือข่าย ก็ใช้ KA9Q TCP/IP stack กัน
ลิงก์โค้ด KA9Q
มันทำงานบน DOS แต่พอร์ตไป Linux ได้ไม่ยาก
ไม่นานมานี้ผมยังลองใช้ไคลเอนต์ CWSDPMI อยู่เลย ซึ่งช่วยให้โปรแกรม 32 บิตทำงานได้ทั้งบน DOS และ Windows
วิกิของ CWSDPMI
ตอนเด็ก ๆ เหตุผลที่ผมเริ่มหัดบัดกรีก็เพื่อทำ สาย null modem ใช้เอง
หลังจากนั้นก็ได้รู้จักตัวต้านทาน และลองทำ Covox Speech Thing การ์ดเสียงสำหรับพอร์ตขนานขึ้นมาเอง
เป็นช่วงเวลาที่สนุกมากจริง ๆ
ผมไปซื้อ resistor กองใหญ่จาก Maplin แล้วบัดกรีแบบงู ๆ ปลา ๆ แต่กลับใช้ได้สมบูรณ์ตั้งแต่ครั้งแรก
ทำไว้เพื่อจะเล่น OMF2097 กับเพื่อน ๆ จะได้ไม่ต้องแย่งคีย์บอร์ดตัวเดียวกัน
การได้ เล่นไฟล์ Mod จากอุปกรณ์ที่ทำเองแล้วฟังผ่านลำโพงพกพามันเจ๋งมาก
พอมารู้จัก flux ทีหลัง การบัดกรีก็ง่ายขึ้นเยอะ
พอเห็นคำว่า “วิศวกร DJGPP” ก็ทำให้นึกขึ้นได้ว่า ที่จริงแล้วแทบจะเป็น DJ Delorie คนเดียว
การพอร์ต toolchain ของ GCC ทั้งชุดมาลง DOS/Windows เป็น ความสำเร็จที่ยิ่งใหญ่มาก
ไม่แน่ใจว่าเขาเพิ่มฟีเจอร์ตามคำขอของ id Software หรือทำเล่นเพราะสนุกเอง แต่ก็น่านับถือมาก
เขาเป็นผู้เขียน CWSDPMI และทำงานร่วมกับ id โดยตรง
แม้จะฟังดูแปลกนิดหน่อยเมื่อพูดถึงโปรเจ็กต์โอเพนซอร์ส แต่ก็น่าจะเป็นเรื่องจริง
แล้วการที่คนยังแปลกใจว่า Quake รันอยู่ใน VM ได้นี่ ก็น่าจะเป็นเพราะไม่รู้จัก โหมด VM86
เลยสงสัยว่าในอเมริกาวิชาพละแบบนี้เป็นเรื่องปกติไหม
ชื่อ “Chunnel” น่าจะมาจาก Channel Tunnel
ผมจำได้ว่าเคยอ่าน TECHINFO.TXT ตอนพยายามตั้งค่า TCP/IP multiplayer ของ Quake
ในนั้นบอกว่าใช้ TCP/IP stack ของ Beame & Whiteside
ผมไปหาและติดตั้งซอฟต์แวร์จาก ftp.cdrom.com แต่ตอนนั้น ความรู้เรื่องเครือข่ายยังไม่พอ เลยตั้งค่ายากมาก
สุดท้ายก็มีอาการแลคหนักและประสิทธิภาพไม่ดี จนเล่น NetQuake ผ่าน WinQuake ยังดีกว่าเยอะ
รู้สึกว่า Fabian น่าจะเริ่มทำ งานวิจัยเกี่ยวกับ Quake แล้ว
ผมเองก็อยากได้ความช่วยเหลือเรื่องแก้ปัญหา OpenGL ใน fork ของ chocolate Doom 3 BFG ที่ผมทำอยู่
แต่ Quake เป็นโลกที่ ซับซ้อนกว่า Doom มาก เลยยากจะเล่าให้ครบได้ด้วยหนังสือแค่เล่มเดียว
ในยุค 90 แค่ ต่อโมเด็มเข้าหาเบอร์โทรของเพื่อน ก็เล่นหลายคนใน Quake หรือ Doom ได้ง่าย ๆ
แต่มาตอนนี้กลับแทบเป็นไปไม่ได้ถ้าไม่มีเซิร์ฟเวอร์ ซึ่งก็ดูย้อนแย้งดี
ตอนแรกยังไม่มี TCP/IP แต่ภายหลังก็แก้ได้ด้วย ไดรเวอร์ iDOOM TCP
ตอนลองในหอพักมหาวิทยาลัย มันให้ความรู้สึกเหมือนนวัตกรรมล้ำยุคจริง ๆ
แนวคิดมันเหมือน Hamachi ที่อยู่ในเอนจินเกม
เพียงแต่ทุกวันนี้หลายค่ายเกมมักบล็อกเซิร์ฟเวอร์ส่วนตัวเพื่อรักษารายได้จาก การขายสกิน
Valve เป็นข้อยกเว้นที่ยังยอมให้มีเซิร์ฟเวอร์แบบกำหนดเองของ TF2 และ Minecraft ก็ยังปิดระบบยืนยันตัวตนแล้วเข้าไปเล่นกับเพื่อนได้อยู่
พอ Windows 95 มากับ TCP/IP ในตัว ยุคที่ต้อง ติดตั้ง TCP แยกเอง ก็จบลง
โลกเปลี่ยนไปเมื่อการ์ดเครือข่ายเริ่มเข้าสู่ตลาดผู้ใช้ทั่วไป
แต่ Windows จะไม่ติดตั้ง TCP/IP ถ้าไม่มีการ์ดเครือข่าย และ แม้แต่คำสั่ง ping ก็ไม่มี
เลยสงสัยว่า Windows 11 ทุกวันนี้ถ้าติดตั้งแบบไม่มีเครือข่ายจะเป็นอย่างไร
ทุกวันนี้ยังค้นกูเกิลเจอ บทสอน DJGPP/NASM ที่ผมเขียนไว้เมื่อ 25 ปีก่อนได้อยู่