BBS Door Development (Part 1)

Trade Wars 2002 Splash Screen

Part 1: I’ll document (loosely 😅) how I set up the development environments to compile a BBS door game for DOS, Windows, Linux and OS/2 with old school tools. Links to all the software i used are included down below under “Downloads.”


🚪 The enduring allure of BBS Doors

Ever wonder how BBS door games were created back in the 80’s and 90’s? How developers created these cool games and utilities that would work over analog phone lines (later, telnet)?

I’ve been obsessed since I first stumbled upon my first BBS, a local WWIV board in Riverside, CA.

Back then, door game authors had to deal with a whole host of things that we now take for granted in the Internet age of BBSing: OS/platforms with different compilers, FOSSIL communications with DOS for compatibility and so much more.

That shit was hard.

By comparison, making a BBS door today is as easy as writing a console application (for Linux) that prints to STDOUT. Linux-based BBSs handle redirection from the network. A few lines of code and… Bam! We got ourselves a DOOR 💪

OK, maybe it’s a bit more complex than that – but there’s an embarrassment of riches when it comes to programming language options today: C++, C#, Go, Python, Javascript, Rust – not to mention all the open source libraries for code, discord channels for support, on-demand e-learning…

IMHO, if you want to make a BBS door game today, the lowest barrier to entry is the Linux route.

OK, but “Linux only” is not very old-school, is it? What about my Windows crew? Or the RENEGADE DOS BBS gang? I’m not sure who runs an OS/2 BBS… but THINK OF THE CHILDREN, WON’T YOU?? They need their OS/2 BBS doors, too! Are you going to DENY those 2 people the pleasure of your new door??

Ahem. OK.

Door Kits FTW

So “Door Kits” were born. Pre-packaged source code libraries that made it easier to make a BBS door. Functions were included to handle the heavy lifting of communication routines, sysop screens, time-outs, reading drop files, etc. All the events you might need for shelling to DOS (ha!), chatting with users, dealing with carrier loss, etc. were included as functions that could be called by your door.

Door Kits let developers focus on creating the best, most fun experience possible for users and not get bogged down in wrestling with common functions over and over.

👉 Read more about Door Kits from the legendary Jack Phlash

A few more modern Door Kits are still used widely today – Open Doors and RMLib come to mind. I’ve tried to use them, but I’m not a C programmer and I could never really get them to work across platforms. But I’ve been assured they do, indeed, work.

(I did create my own door library, Go Doors, for Linux but I doubt anyone ever used it besides me, and then just for a demo).

So here’s where FINALLY I tell the tale of how I set out how to learn BBS door creation using old school methods, digging up the exact tools used back in the heyday (albeit with some modern conveniences, like virtualization) of BBSing.

🎉 Let’s party like it’s 1994!

My wish list:

It turns out Pascal (pre Delphi) was ubiquitous back in those days for BBS applications, and it had a reputation for being easy-ish to learn and pretty powerful. It’s considered by many to be a dead language now, but there were a TON of BBS related apps created with Pascal.

We’ll get to the dreaded Borland “Runtime Error 200 - ‘Divide by 0’” bug later on in Part 2. The issue was never officially patched by Borland and still plagues those of us interested in preserving BBS history, much of which was created using Pascal.

😺 What I found…

The only Door Kit I found that supported all these platforms “out of the box” was D32 v04 by James Coyle (speaking of BBS royalty!), aka g00r00, the author of Mystic BBS and the co-author of the Door32.sys standard. There were a few other kits that handled Win32 and DOS (Xdoor, which i believe was modifed to create D32?), but fewer that spanned the gamut, including Linux – apart from Open Doors, as mentioned above.

Let’s start with the D32 documentation:

About D32 Door Kit

That sounds pretty good to me. And given the reputation of the author, I’d say it’ll do exactly that… OK, reading on… Here’s where we learn what it’s going to take to fire up this bad-boy:

How to compile D32

So that’s what we’ll need. We’ll create those dev environments with those exact software versions. Thankfully, these packages are floating around the Internet (and BBS file areas!).

💥 Let’s do this!

In order to compile our example door, we’re going to need period accurate (or similar) development environments. AND we’re going to create all the above environments on a single, Windows-based 32-bit machine.

Win32

We can compile the Windows, DOS and OS/2 binaries on a Windows 32-bit OS as a base. I used Windows 7. And since a 32-bit Windows OS can also run/compile 16-bit DOS programs, we’re all set there.

Perhaps it could also be done with a more modern rig as well, e.g. Windows 64-bit OS using NTVDMx64? – I don’t know – let me know if this works for you?

Well, speaking of time-period-accurate environments, Windows 7 was actually released in 2009, so even that’s a bit too modern – it’s a cheat – but I didn’t want to deal with anything earlier… And Win7 is actuallty a pretty darn capable as a daily driver, even in this day age! BUT I DIGRESS…

Linux

For the Linux env, we’ll spin up Virtual Box on the same Windows 32 machine with a guest instance of Ubuntu Mate 18.04, 32-bit.

Actually, any 32-bit version of linux should theoretically work, and even a Server version is fine, since we won’t need a GUI – we’ll use the Free Pascal command line to create the binary.

But it HAS to be a 32-bit linux guest OS, not just because our host is 32-bit (duh), but the 64-bit version of Linux will generate FPC compile errors 🤦

BTW – RIP 32 bit OSs. They’re basically dead. Even Ubuntu stopped releasing them. Windows 10 was the last 32-bit version Microsoft will ever ship…

👇 Downloads

We’ll need all the Pascal compilers for the different OSs. We’ll be setting up 3 different compilers to generate the executables. And it goes without saying that pretty much all this software is legacy and unsupported…

Just a note, watch out for any versions of Windows you might be tempted to snag for “trial purposes” from archive.org. As one user posted:

“These Windows downloads come pre-loaded with viruses so you don’t have to load it with viruses yourself!”

Installation notes from g00r00

Goes without saying, everything you need is in the docs.

D32 install notes

Final result - so far

OK, maybe that was a lot of work to set up the environments, but that was the hard part. The FUN part – writing and compiling the door – is up next.

Oh, and well lookie here, Windows desktop shortcuts to our 3 development environments, READY TO ROCK!

Windows 7 shortcuts


In Part 2, I’ll document how I compiled D32’s example Pascal source files across all the OS/platforms. And I’ll do this as a not-very-proficient Pascal programmer 😄


Comments

comments powered by Disqus