Quake1 with WATTCP built with DJGPP on DOSBox


As far as I know this was never done, as the world at large moved away from MS-DOS, and of course when Quake 1 on MS-DOS was popular they weren’t exactly giving out the source… Such a shame the DLM thing was lost in the shuffle as DLL’s on DJGPP/MS-DOS could have made quake more modular..

So what I’ve done, is I’ve used an ancient version of cygwin that I was playing around with line, and built a cross compiler for DJGPP. Then using that I’ve built the latest version of Watt-32 tcp/ip with it, then I took my build of Quake 1 on DJGPP, and built quake to use the net_bsd, net_udp, net_dgrm services, and added in the needed hooks for Watt-32 TCP/IP. And to their credit, I just added a single function call to both protocols init functions, and a single function to the general network poll function. All and all I think it’s 3 lines I changed.

Then to test, I used an older copy of DOSBox that included a virtual NE2000 that binds onto a physical interface via libpcap, loaded up the packet ne2000 driver, and ran the client!

For a server, I used the much older, quake dedicated server I had built to run on Windows NT 3.1. Although I never did automatically turn on the ‘-dedicated’ flag for some reason…

On the Windows XP virtual machine, I installed a loopback adapter, then set it up with internet connection sharing so that XP would act as a DHCP server to the Watt-32 TCP/IP stack.

Anyways, as you can see in the picture I connected a simple sniffer, WinDump to watch the packets, and it worked.

I’m still blown away that it worked on the first shot.

It’s really a testament to all the people that make all the moving parts here, when I can just string stuff along and get it to work.

For anyone daring enough, this zip contains all the source, and binaries of all the parts, except for the cygwin install. (I did have to poach a ‘modern’ cygwin1.dll from a modern install).


2 thoughts on “Quake1 with WATTCP built with DJGPP on DOSBox

  1. Sorry for the very late response to this, feel free to ignore …. I did find out about your Cygwin cross-compiler a week or two ago, and finally just now tested it.

    Honestly, I was too distrusting and lazy to actually run it under Cygwin’s Bash environment, though you didn’t include cygwin1.dll, so I did have to copy that over. (Not sure which Cygwin this was tested with, but apparently it works even with newer 1.7.) So I ended up having loads of problems trying to find headers and object files and libraries, but after a few lame kludges (-L switch, copying files, etc), it finally worked (Win7 64-bit SP1 Home Premium) and compiled a very simple example correctly.

    I love “classic” GCC 2.95.3, but BinUtils 2.9.1? Meh? What’s worse is DJGPP 2.02 [sic], I’d rather have 2.03p2 with Win2k fixes. But it doesn’t matter atop Win64 anyways, so DOSBox ftw! 😉

    Yeah, we’ve really needed a good Cygwin hosted cross-compiler for DJGPP for years now, but I was never adventurous enough to rebuild it. (Tried and failed. GCC is a pain.) Honestly not sure this one is 100% ideal, but it’s loads better than nothing! 😉

    • I’ve had major issues with old versions of cygwin1.dll locking up windows bad.. and really really old stuff working just fine… There is some weirdisims about cygwin & the win32 stack that I don’t even remember other than XP sp2 and beyond really changed the way it worked.

      building binutils/gcc can be a pain, doing a cross build can be a royal pain… I think they ‘solved’ a lot of that stuff with “Canadian Cross” builds where you have a cross compiler building a cross compiler….

      A million years ago there was a version of GCC you could build with Visual C++, I wonder if that could build a cross compiler for DJGPP, although again that all sounds rather confusing!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.