11 คะแนน โดย GN⁺ 2025-11-19 | 4 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
bungker 2025-11-21

ในยุคนั้น ถ้าพูดถึง John Carmack ก็ต้องบอกว่าเป็นอัจฉริยะในหมู่อัจฉริยะของนักพัฒนาเลยครับ

 
thinkpad 2025-11-20

ได้อ่านบทความดี ๆ แล้ว สนุกมากจริง ๆ ครับ

 
ipuris 2025-11-20

ฮ่าๆ สนุกดีนะ

 
GN⁺ 2025-11-19
ความคิดเห็นใน 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 แล้วบัดกรีแบบงู ๆ ปลา ๆ แต่กลับใช้ได้สมบูรณ์ตั้งแต่ครั้งแรก
    • ตอนนั้นไม่ได้รับอนุญาตให้ใช้หัวแร้งบัดกรี ก็เลย ตัดสาย serial ธรรมดาแล้วดัดแปลงเป็น null modem แทน
      ทำไว้เพื่อจะเล่น OMF2097 กับเพื่อน ๆ จะได้ไม่ต้องแย่งคีย์บอร์ดตัวเดียวกัน
    • ผมก็หัดบัดกรีในช่วงนั้นเหมือนกัน
      การได้ เล่นไฟล์ Mod จากอุปกรณ์ที่ทำเองแล้วฟังผ่านลำโพงพกพามันเจ๋งมาก
      พอมารู้จัก flux ทีหลัง การบัดกรีก็ง่ายขึ้นเยอะ
  • พอเห็นคำว่า “วิศวกร DJGPP” ก็ทำให้นึกขึ้นได้ว่า ที่จริงแล้วแทบจะเป็น DJ Delorie คนเดียว
    การพอร์ต toolchain ของ GCC ทั้งชุดมาลง DOS/Windows เป็น ความสำเร็จที่ยิ่งใหญ่มาก
    ไม่แน่ใจว่าเขาเพิ่มฟีเจอร์ตามคำขอของ id Software หรือทำเล่นเพราะสนุกเอง แต่ก็น่านับถือมาก

    • ตอนนั้น DJGPP มีชุมชนค่อนข้างใหญ่ และเครดิตเรื่องการปรับแต่ง Quake ก็ควรยกให้ Charles Sandmann มากเช่นกัน
      เขาเป็นผู้เขียน CWSDPMI และทำงานร่วมกับ id โดยตรง
    • ผมเองก็จำได้ลาง ๆ ว่ามี การติดต่อกันเรื่อง CWSDPMI ระหว่างทั้งสองคนจริง ๆ
      แม้จะฟังดูแปลกนิดหน่อยเมื่อพูดถึงโปรเจ็กต์โอเพนซอร์ส แต่ก็น่าจะเป็นเรื่องจริง
      แล้วการที่คนยังแปลกใจว่า Quake รันอยู่ใน VM ได้นี่ ก็น่าจะเป็นเพราะไม่รู้จัก โหมด VM86
    • ผมอยากดูบทสัมภาษณ์ของ DJ Delorie มาก
    • ผมไปดูเว็บไซต์ของเขาแล้วเจอว่า ตอนเรียนมหาวิทยาลัยเขาเคยลงเรียนวิชา การยิงปืน ด้วย
      เลยสงสัยว่าในอเมริกาวิชาพละแบบนี้เป็นเรื่องปกติไหม
    • ผมเริ่มเขียนโปรแกรมครั้งแรกก็เพราะ DJGPP
  • ชื่อ “Chunnel” น่าจะมาจาก Channel Tunnel

    • หรือไม่ก็อาจได้แรงบันดาลใจจาก ภาพยนตร์สมมติชื่อ ‘Chunnel’ ที่โผล่ในตอน “The Pool Guy” ของ Seinfeld ซึ่งออกอากาศในปี 1995
  • ผมจำได้ว่าเคยอ่าน TECHINFO.TXT ตอนพยายามตั้งค่า TCP/IP multiplayer ของ Quake
    ในนั้นบอกว่าใช้ TCP/IP stack ของ Beame & Whiteside
    ผมไปหาและติดตั้งซอฟต์แวร์จาก ftp.cdrom.com แต่ตอนนั้น ความรู้เรื่องเครือข่ายยังไม่พอ เลยตั้งค่ายากมาก
    สุดท้ายก็มีอาการแลคหนักและประสิทธิภาพไม่ดี จนเล่น NetQuake ผ่าน WinQuake ยังดีกว่าเยอะ

  • รู้สึกว่า Fabian น่าจะเริ่มทำ งานวิจัยเกี่ยวกับ Quake แล้ว

    • เขามีส่วนร่วมกับโปรเจ็กต์ chocolate-quake จริง ๆ และยังส่ง บั๊กรายงาน ไว้ด้วย
      ผมเองก็อยากได้ความช่วยเหลือเรื่องแก้ปัญหา OpenGL ใน fork ของ chocolate Doom 3 BFG ที่ผมทำอยู่
    • ดูเหมือนเขากำลังไปในทางนั้น
      แต่ Quake เป็นโลกที่ ซับซ้อนกว่า Doom มาก เลยยากจะเล่าให้ครบได้ด้วยหนังสือแค่เล่มเดียว
  • ในยุค 90 แค่ ต่อโมเด็มเข้าหาเบอร์โทรของเพื่อน ก็เล่นหลายคนใน Quake หรือ Doom ได้ง่าย ๆ
    แต่มาตอนนี้กลับแทบเป็นไปไม่ได้ถ้าไม่มีเซิร์ฟเวอร์ ซึ่งก็ดูย้อนแย้งดี

    • DOOM รองรับ serial multiplayer มาตั้งแต่เดือนธันวาคม 1993 และในปี 1994 ก็เล่นผ่านเครือข่าย IPX ได้แล้ว
      ตอนแรกยังไม่มี TCP/IP แต่ภายหลังก็แก้ได้ด้วย ไดรเวอร์ iDOOM TCP
      ตอนลองในหอพักมหาวิทยาลัย มันให้ความรู้สึกเหมือนนวัตกรรมล้ำยุคจริง ๆ
    • ทุกวันนี้ใช้ STUN server หรือ Steam Datagram Relay ของ Steam เพื่อแก้ปัญหา NAT
      แนวคิดมันเหมือน Hamachi ที่อยู่ในเอนจินเกม
    • ก็เลยสงสัยว่า มีทางใช้ Tailscale ให้มันง่ายเหมือนสมัยก่อนบ้างไหม
    • ที่จริงแค่ตั้ง port forwarding บนเราเตอร์ก็พอ
      เพียงแต่ทุกวันนี้หลายค่ายเกมมักบล็อกเซิร์ฟเวอร์ส่วนตัวเพื่อรักษารายได้จาก การขายสกิน
      Valve เป็นข้อยกเว้นที่ยังยอมให้มีเซิร์ฟเวอร์แบบกำหนดเองของ TF2 และ Minecraft ก็ยังปิดระบบยืนยันตัวตนแล้วเข้าไปเล่นกับเพื่อนได้อยู่
  • พอ Windows 95 มากับ TCP/IP ในตัว ยุคที่ต้อง ติดตั้ง TCP แยกเอง ก็จบลง

    • ตอนนั้นเครือข่ายยังเน้นฝั่งองค์กรเป็นหลัก ดังนั้นการติดตั้งที่บ้านจึงแทบจะเป็น งานอดิเรกของคนเฉพาะทาง
      โลกเปลี่ยนไปเมื่อการ์ดเครือข่ายเริ่มเข้าสู่ตลาดผู้ใช้ทั่วไป
      แต่ Windows จะไม่ติดตั้ง TCP/IP ถ้าไม่มีการ์ดเครือข่าย และ แม้แต่คำสั่ง ping ก็ไม่มี
      เลยสงสัยว่า Windows 11 ทุกวันนี้ถ้าติดตั้งแบบไม่มีเครือข่ายจะเป็นอย่างไร
    • สมัย Windows 3.1 เคยใช้ Trumpet Winsock
    • เคยมีคนพูดกันว่า TCP/IP stack ของ Windows 95 ยกมาจาก FreeBSD
  • ทุกวันนี้ยังค้นกูเกิลเจอ บทสอน DJGPP/NASM ที่ผมเขียนไว้เมื่อ 25 ปีก่อนได้อยู่