Hacker News 中文摘要

RSS订阅

Quake.exe如何获得其TCP/IP协议栈 -- How Quake.exe got its TCP/IP stack

文章摘要

1996年发布的《雷神之锤》面临三大技术变革:3D显卡兴起、互联网发展及操作系统更迭。微软推动Windows 95/NT取代DOS,id Software创新性地开发了同时兼容DOS和Windows的quake.exe单文件程序,并利用DJGPP编译器实现32位寻址,还能在Windows 95下调用更优的TCP/IP协议栈。

文章总结

《quake.exe如何实现TCP/IP协议栈》

1996年6月发布的《雷神之锤》在其生命周期中经历了三次技术浪潮冲击。除了3D硬件加速卡的兴起和互联网的发展,操作系统更迭使游戏开发者陷入两难境地。

随着微软力推Windows 95和Windows NT,传统的MS-DOS系统逐渐被取代。1996至1997年间,DOS市场份额骤降50%。暴雪北方等开发商选择全力投入Windows 95平台开发《暗黑破坏神》等独占游戏,而id Software则另辟蹊径,打造了能同时运行在DOS和Windows系统的quake.exe单一程序文件。

技术实现亮点: 1. 跨平台编译技术 quake.exe本质是DOS可执行文件,但通过DJGPP编译器(替代DOOM时代的Watcom)实现了Alpha服务器上的交叉编译。其核心在于DJGPP的DPMI(DOS保护模式接口)客户端能同时兼容DJGPP和Windows 95的DPMI服务端。

  1. 网络协议支持差异
  • DOS环境:仅支持通过PDIPX.EXE加载IPX协议(需额外TSR程序),TCP/IP协议因缺乏原生栈支持几乎不可用
  • Windows 95环境:通过Mpath公司的"Chunnel"技术桥接至系统自带的Winsock协议栈
  1. Chunnel技术解析 这套由Mpath开发的专有系统包含多个组件:
  • qlaunch.exe:主加载程序
  • quakeudp.dll:核心桥接模块(对接wsock32.dll)
  • genvxd.dll:虚拟设备驱动管理器
  • mgenvxd.vxd:通过中断0x48实现DOS与Win32通信

技术演进: 1996年12月后,id Software放弃DOS版本,推出的winquake.exe等后续版本直接调用Windows的wsock32.dll,这套复杂的技术方案就此退出历史舞台。

(注:文中保留了关键技术人员访谈、技术细节和时间节点,删减了部分开发者轶事和次要技术描述)

评论总结

总结评论内容:

  1. 关于英法海底隧道命名来源的讨论
  • 观点:隧道命名可能受到同期其他工程成就的启发
  • 引用:"The British guy named Henry might have named it after another feat of engineering"(afandian)
  • 引用:"I didn't work on the Chunnel. That was mainly a British guy named Henry"(afandian)
  1. 对Windows 95网络功能的观察
  • 观点:Windows 95内置TCP/IP功能影响了第三方软件市场
  • 引用:"this is win95 where they shipped it inside the os and put some company out of business"(sroussey)
  1. 早期计算机技术的个人经历分享
  • 观点:作者分享了早期DIY计算机外设的经历
  • 引用:"I learned to solder as a pre-teen so I could make a nullmodem"(ggambetta)
  • 引用:"I learned that resistors were a thing when I made a parallel port sound card"(ggambetta)
  1. 对Windows 95虚拟化技术的讨论
  • 观点:Windows 95的虚拟x86模式与现代虚拟机概念不同
  • 引用:"Virtual x86 mode had little to do with what we nowadays think of when someone says 'virtual machine'"(nikanj)
  1. 对DJGPP开发历史的探讨
  • 观点:DJGPP主要是由DJ Delorie个人开发,对其贡献表示赞赏
  • 引用:"DJGPP was always open source so I bet he got some contributors"(skrebbel)
  • 引用:"DJGPP was spectacularly good back in the day"(skrebbel)