A Web Server, The Sixteen Bit Way

If you were to talk about sixteen bit computing in retrocomputing circles, misty-eyed reminiscences of the ST or Amiga would emerge. Both fine platforms, but oddly the elephant in the 16-bit room has become a victim of its own success. DOS, the granddaddy of all PC operating systems, seems oddly overshadowed by its 68000-based competitors in a way it certainly wasn’t back in the day. Perhaps it’s the often-atrocious graphics when cards designed for business graphics were pressed into gaming service, but it’s easy to forget that DOS PCs were the powerhouses of their day. They still pack a punch even in 2023, as [Lunduke] is here to show us by running a DOS web server. Take that, nginx!

The WebServ home page, featuring a stylised alien.
Three letter file extensions for the win!

While Microsoft and IBM abandoned DOS a very long time ago, the OS lives on in the form of the well-maintained open-source equivalent, FreeDOS. It’s a lifeline for people with DOS-era hardware to maintain as much as it is a favourite in retrocomputing, thus it’s the obvious place to start when installing a web server.

It’s a while since we navigated the many layers of DOS packet drivers and TCP stacks, but this guide implies that the FreeDOS folks have made it a much nicer process than it used to be. He installs the Sioux and WebServ web servers to compare two different options, configures the network, and hey presto!, a web page!

We can see that there’s little real-world value in running an internet-connected website from a 16-bit machine using nearly 20-year-old unmaintained software with no server-side processing capabilities here in 2023, but that’s not the point. DOS may be antiquated, but it’s still capable, it’s very adaptable and configurable, and it’s still just about relevant. We can completely see the fun in making it do unexpected things not because it needs to, but because it’s there.

Want more DOS fun? Boot your PC from vinyl.

Header image: Ruben de Rijcke, CC BY-SA 3.0.

13 thoughts on “A Web Server, The Sixteen Bit Way

    1. The 1983 IBM XT is a 16-bit computer, because the 8088 internal CPU is 16-bit (with 16-bit datapaths). What defines a 16-bit computer isn’t the size of the datapath though, it’s the size of data an ALU can process for general arithmetic and logical functions. The 8088, 8086, 80186 and 80286 could only perform 16-bit ALU operations (even though the 80286 could address up to 1GB of virtual memory).

      Hence, a Z80, 6809 and 8080 are 8-bit computers, because although they can do 16-bit arithmetic; they can only do 8-bit logical functions. The Z80 has an internal ‘double-pumped’ 4-bit ALU, this doesn’t make it a 4-bit computer. The Z80 and 8080 have 16-bit register _pairs_; this doesn’t make them 16-bit, because they are generally used as 8-bit registers. The 6809 has 4 x 16-bit address registers; this doesn’t make it 16-bit, because they’re not used for ALU operations (though LEA instructions are effectively ADD instructions, again, it doesn’t include logic).

      The pdp-11 and Nova were a 16-bit minicomputers, but not because they had 16-bit databusses (I’m not sure all the LSI-11 variants did), but because they could perform 16-bit arithmetic and logic functions. Again, some of the Novas had a 4-bit ALU, which did not make them 4-bit computers (the 4-bit ALU was employed 4x in an instruction to perform 16-bit operations).

      The 68008 variant of the 68000 was a 32-bit CPU, even though it also had an 8-bit databus just like the 8088 did. That’s because the 680xx all had an ALU which could perform 32-bit ALU operations. Likewise, the 68000 was a 32-bit CPU, even though it had a 16-bit databus.

      I hope this clarifies things.

      1. I’m sorry, but I can’t completely agree here.

        The IBM PC Model 5150 may have a CPU (8088/NEC V20) that’s able to handle 16-Bit instructions and has a 20-Bit adress bus, but..

        From the perspective of a hardware engineer, this PC clearly is an 8-Bit design. It uses the same 8-Bit chips as other contemporary Z80/8080 systems of the day.

        The IBM PC/AT Model 5170 is indeed a 16-Bit system.
        The bus width is 16-Bit/24-Bit (data bus/adress bus).

        That being said, some PC compatibles like the Amstrad PC1512 are indeed 16-Bit. They’re using an 8086 (or V30) and some components like memory are being interfaced via 16-Bit.

        Anyway, to err is human. Please never mind.

  1. “DOS, the granddaddy of all PC operating systems, seems oddly overshadowed by its 68000-based competitors in a way it certainly wasn’t back in the day. Perhaps it’s the often-atrocious graphics when cards designed for business graphics were pressed into gaming service, but it’s easy to forget that DOS PCs were the powerhouses of their day.”

    It’s an interesting article, but I’m not sure much of this section is really true. The reason why 68000 based computers overshadow 8086-based PCs for internet applications today is fairly simple: it’s because they have a 32-bit architecture and a flat 32-bit addressing space, so it’s relatively easy to take modern code (which assumes at least a flat 32-bit addressing space) and compile it for those machines. In addition, the first web server was run on the 68030-based NeXT Cube in the early 90s; migrated then to 32-bit (and early 64-bit) RISC workstations before making it to 80386 PCs and 680×0-based Macintosh computers all of which were 32-bits. In particular, a humble 4MB, 68000 based compact Macintosh could run MacTCP and early web browsers, which is sufficiently similar to Amiga and Atari ST computers (with enough RAM).

    It can’t be because of the graphics cards, which although poor, some had comparable resolutions to an early Macintosh (Hercules and EGA could manage 720×348 or 640×350).

    In other words, 16-bit computers were largely bypassed (though not entirely, since I believe some of the earliest browsers would run on the 16-bit, Windows 3.1.1 under the WIN32-bit API; I don’t remember seeing them run on an 80286 under the 16-bit API).

    1. 68000 is a little funny in terms of 16 vs 32-bit and Motorola recognized that calling it a”16/32 bit” CPU. Functionally, it always was a 32-bit CPU even if it initially had a 16-bit ALU and 16-bit data paths. IIRC the DG Nova began life with a single 4-bit 74181 ALU pumped 4 times for 16-bit, right?

      1. +1

        That’s where the Atari ST got its name from, or so I heard (STb Sixteen/Thirty-Two).

        But there’s always the dilemma of categorizing things.

        A software developer, software architect etc (back then: programmer) sees the instructions set and register sizes.

        A hardware engineer, an electronics technician sees the chip’s pinout (CPU, EPROM etc) and the number of data lines.

        So both groups may see the same system as 16-Bit and 8-Bit, respectively.

        This may become even more complicated if we look at popular CPUs like the Z80.

        It’s generally being accepted to be an 8-Bit part. But is it, really?

        It has 8-Bit instructions, but some 8-Bit registers may be combined to form an 16-Bit register.

        It also has no 8-Bit ALU, but a 2x 4-Bit ALU.

        Then, the address bus is 16-Bit (64KB), like with most 8-Bit CPUs.

        If it was prestine 8-Bit CPU, then the address range was a modest 256 Byte.

        All these things come to play when we start categorizing.

        So maybe, it’s best if we’re being a bit relaxed here.
        Saying that a Z80 is 8-Bit more or less, isn’t wrong, after all.

    2. I think that sums it up pretty well.

      I also think you’re right about Windows 3.1/80286.

      While Windows 3.1x (and WfW 3.10) could run on a 286 PC, it had a few drawbacks.

      a) There was no virtual memory to compensate for lack of physical memory.
      b) The drivers and network stack had to be 16-Bit, despite the TCP/IP IPv4 protocol being using a 32-Bit address space (4GB).

      That’s why 32-Bit made somewhat more sense in 386 Enhanced-Mode.
      Either by using Win32s (IE5 16-Bit had an equivalent built-in) or by using a 16-Bit application that uses WinMEM32 API.
      Or by using Watcom compiler, which had a special 386 Protected-Mode extender with its own implementation of a 32-Bit Windows API (meant for Windows 3.0+3.1)

      That being said, it could well be that 16-Bit Winsocks and 16-Bit IPV4 network stacks exist do exist for Windows 3.1x/WfW 3.10 etc.

      In same way, there might be 16-Bit versions of old E-Mail programs or lesser known web browsers (the early 90s were very experimental).

      Btw, I heard there’s also Geoworks Ensemble.
      The versions from the 90s might be 16-Bit, still.
      Maybe they do support a form of networking, too, not sure.

    1. “Most home and personal computers of the late 1970s and 1980s used a disk operating system, most often with “DOS” in the name and simply referred to as “DOS” within their respective communities: CBM DOS for Commodore 8-bit systems, Atari DOS for the Atari 8-bit family, TRS-DOS for the TRS-80, Apple DOS and ProDOS for the Apple II, and MS-DOS for IBM PC compatibles.”

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

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