A question no one has asked: could you take a 90s BBS and compile it from source using modern dev tools? We decided to find out using Impulse BBS, a platform that was huge in the underground scene back in the day.
Why Impulse?
Impulse was popular with scene BBSes—those invitation-only underground boards that were all about warez, hacking, demos, and especially ANSI/ASCII art. The art scene alone was incredible. What started as simple colored blocks evolved into multi-page masterpieces that pushed the boundaries of what you could do with character-based graphics.
We got to talk with Brandon Sneed, the original creator of Impulse, who shared some amazing stories about learning to code in the late 80s, wardialing PBX systems to call long-distance BBSes for free, and how his “selfish act” of building a BBS ended up launching his entire software engineering career.
The Challenge
Here’s the thing: we don’t have much Pascal experience. It’s been decades since either of us touched it. The Impulse 7.1 source code came with dozens of .PAS files but almost no documentation. No build instructions. Just a README file that basically said nothing useful.
Our testbed was a 1996 MicroGram PC with an AMD K5 100 MHz CPU, 32 MB RAM, SD-IDE adapter, PCI NIC, and a dialup modem running MS-DOS 6.22. We set up MS LAN Manager with a Samba 4.16 file server (set to LANMAN1 protocol for SMBv1 support) so we could rapidly test new builds over the network.
Getting It to Compile
With help from BBS scene expert Jack Phlash, we started with Borland Pascal 7.0. First problem? Missing CHECKPAT.TPU—a compiled unit file that wasn’t included in the source. Luckily, Jack had posted it online years ago during the brief Nexus/2 development phase, which was sort of a fork of Impulse.
After copying files locally (network share was hitting some DOS limitation), we finally got IMP.EXE and IMP.OVR to compile. The OVR file is an overlay that works around DOS’s 640KB conventional memory limit by dynamically swapping code segments.
Modernizing the Workflow
Once we confirmed we could compile in DOS, we wanted to automate everything. We created a build script that runs DOSBox from Linux and uses Borland Pascal’s command-line compiler. Then we set up GitLab Community Edition for version control and created a CI/CD pipeline with Docker that automatically builds whenever we push changes. We even get Slack notifications when builds complete.
It’s honestly kind of absurd—a 90s BBS going through a modern DevOps pipeline—but it works beautifully.
The Y2K Bug
When we first tried running our compiled version, we hit a Y2K bug. The system wouldn’t start with the current date. Setting the date back to 1999 let it run, so we knew what we were dealing with.
The fix was in COMMON.PAS. The original code only validated years from 1985-1999. We implemented a simple two-digit year window: years less than 80 map to 2000-2079, and 80-99 map to 1980-1999. We’ve properly kicked the can down the road for some developer to curse at us in 2080.
Success
After fixing the Y2K bug and rebuilding, Impulse booted right up with the correct date. We configured the modem settings, and Mark was able to dial in successfully. We did it—we got a 90s underground BBS running with a modern automated build pipeline!
This project proved you can absolutely make working with old software easier using modern tools. The git repository is public at gitlab.serialport.org if you want to check out the source or follow along with future changes.
Huge thanks to Jack Phlash and Brandon Sneed for their help and insights. Working on this was the closest we’ve come to recreating that feeling of connecting to a new BBS for the first time. BBSes might not be YouTube gold, but they represent our favorite era of computing, and we’re going to keep preserving it however we can.