Live data from Hacker News

How Quake.exe got its TCP/IP stack

fabiensanglard.net

121–130 of 158 posts

Re: How Quake.exe got its TCP/IP stack

#121

From that first graph: Who was using WinNT in 2005?!

Businesses. And I knew a few diehards who swore Windows 2000 was shit and Windows NT 4.0 was where it was at, even as a workstation. Windows 95 and MS-DOS in 2004 worry me a bit more.

I'm guessing none of these diehards were running domain controllers.

Re: How Quake.exe got its TCP/IP stack

#122
post #84
post #41

In an interview with Lex Fridman, John Carmack said that in retrospect, Quake was too ambitious in terms of development time, as it both introduced network play and a fully polygonal 3D engine written in assembly. So it would have been better to split the work in two and publish a "Network Doom" first and then build on that with a polygonal Quake. Which seems to imply that the network stack was about as difficult to…

And then you had Romero saying that Quake wasn't ambitious enough ...

That's the difference between an engine and game developer.

Re: How Quake.exe got its TCP/IP stack

#124

Earlier quoted context omitted.

Andre Lamothe's "Tricks of the 3d Game Programming Gurus: Advanced 3d Graphics and Rasterization" is a great book for anyone interested in graphics programming from those days.

Also "The Black Book"[0] of Michael Abrash who worked on Quake with Carmack. [0]: https://www.amazon.fr/Michael-Abrashs-Graphics-Programming-S...

https://github.com/othieno/GPBB - the last chapter is a Quake retrospective.

There's also the columns he wrote for Dr Dobbs' Journal during development. They're like an expanded, illustrated version of GPBB chapter's first half. https://www.bluesnews.com/abrash/contents.shtml

Re: How Quake.exe got its TCP/IP stack

#125

Earlier quoted context omitted.

Amen to that! I think I remember there was some communication between ID and Charles Sandmann about CWSDPMI, so even though it's worded a bit strange for an open source project there's probably some thruth in it? Also a bit strange how the author is surprised about Quake running in a 'VM', apparently they don't really know about VM86 mode in x86 processors...

DPMI clients don’t run in a VM, though. They’re just a normal task like any other task / process in Windows.

VM in this usage means Virtual Memory - i.e. with page tables enabled. Two "processes" can use the same memory addresses and they will point to different physical memory. In Real Address mode every program has to use different memory addresses. The VM86 mode lets you to have several Real Mode programs running, but using Virtual Memory.

Re: How Quake.exe got its TCP/IP stack

#126

Random drive-by nitpick: > From the beginning of the development, id had requested from djgpp engineers that their DPMI client would be able to run on djgpp's DPMI server but also Windows 95 DPMI server. I'm pretty sure that "DJGPP engineers" is just one guy, DJ Delorie. DJGPP was always open source so I bet he got some contributors, but if the rest of this sentence is true that "id has requested from djgpp engineers…

Amen to that! I think I remember there was some communication between ID and Charles Sandmann about CWSDPMI, so even though it's worded a bit strange for an open source project there's probably some thruth in it? Also a bit strange how the author is surprised about Quake running in a 'VM', apparently they don't really know about VM86 mode in x86 processors...

Is the author surprised by that, or did you just misread it? The only relevant quote on that page that I see is “It is impressive to see Quake run at full speed knowing that Windows 95 runs DOS executable in a virtual machine.”

He is perhaps surprised that it runs _at speed_ in the VM, not that it runs in the VM which he already knows about.

Re: How Quake.exe got its TCP/IP stack

#127

Earlier quoted context omitted.

It's interesting how STREAMS pervaded everything for a short while (Apple's Open Transport networking stack for System 7.5 and up was also based on STREAMS) but everyone almost immediately wanted to get rid of it and just use Berkley sockets interfaces.

I still don't quite get how you should had communicate with the other systems over the network with STREAMS. With IP you have an address and the means to route the data to that address and back, with TCP/UDP sockets you have the address:port endpoint so the recipient doesn't need to pass a received packet to the all processes on the system, asking "is that yours". So if there is already some network stack providing b…

STREAMS isn’t a networking protocol, it’s an internal data routing thing some UNIXes use locally, and amongst other things to implement the network stack in it.

You’d still be talking of stuff like IP addresses and the like with it. Probably with the XTI API instead of BSD sockets, which is a bit more complex but you need the flexibility to handle different network stacks than just TCP/IP, like erm…

Re: How Quake.exe got its TCP/IP stack

#128

I learned to solder as a pre-teen so I could make a nullmodem :) Then I learned that resistors were a thing when I made a parallel port sound card (this thing https://en.wikipedia.org/wiki/Covox_Speech_Thing ). Fun times!

That parallel port sound card was my primary sound card for a long time. I bought a bunch of full sized resistors from Maplin and soldered them all as janky as a kid can with huge blobs of solder, but it worked perfectly from day one.

Re: How Quake.exe got its TCP/IP stack

#129
post #69

Earlier quoted context omitted.

Same. I only have experience from M.U.G.E.N fighting engine with respect to DJGPP.

I remember back in the day using DJGPP (DJ Delorie) with the Allegro library (Shawn Hargreaves), building little games that compiled and ran on Windows and other OSes, and being part of the community. You can still play the little game I made in under 10K for the Allegro SizeHack competition in 2000: https://web.archive.org/web/20250118231553/https://www.oocit... Back then I was also writing a bunch of articles on ga…

I was quite active in the Allegro community around that time, mostly on the allegro.cc forums - but I was still a 14-year old learning the ropes back then. Missed out on DJGPP, it was already MinGW under Windows for me.

I took part in a few of the later Speedhacks, around 2004-2005, I think?

Allegro will always have a warm place in my heart, and it was a formative experience that still informs how I like to work on games.

EDIT: Hah, actually found my first Speedhack [1]! Second place, not bad! Interestingly, the person who took first place (Rodrigo Braz Monteiro) is also a professional game developer now.

[1]: https://web.archive.org/web/20071101091657/http://speedhack....

Re: How Quake.exe got its TCP/IP stack

#130
post #8

I learned to solder as a pre-teen so I could make a nullmodem :) Then I learned that resistors were a thing when I made a parallel port sound card (this thing https://en.wikipedia.org/wiki/Covox_Speech_Thing ). Fun times!

I wasn't allowed a soldering iron as a kid, so I ended up just chopping and splicing a regular serial cable and turned it into a null modem, all so that I could play OMF2097 with my friends without having to share the same keyboard (we would always fight over right side, which defaulted to using the arrow keys for movement - and so the person who got the right side generally had the advantage, as back then arrow keys…

This must have been around the same time (1993 or so) when many organisations were upgrading old coax 10Base2 network equipment to modern 10BaseT (and eventually 100BaseT). My friends and I, strongly motivated by the incentive of being able to play multiplayer DOOM, managed to source some free ISA 10Base2 Ethernet cards and coax cable and T-connectors from someone's Dad. The only thing we were missing was the terminators which could be made yourself by cutting a coax cable and soldering a resistor between the conductors... fun introduction to LAN technology for us!
Post reply on HN