Search This Blog

Sunday, 4 December 2022

The (Almost) Definitive AGP Article

Contents

3D Takes Centre Stage
PCI: The Limitations
Bringing AGP Into Being
The Players
The First AGP Graphics Card
The First AGP Motherboard
Implementation
Early Benchmarks
Card Controversy
AGP 2.0 aka 4x
Competition & Litigation
AGP's Legacy
Footnote
References

First AGP graphics chipset: Cirrus Logic Laguna3D-AGP (3 Feb 1997)
First AGP graphics card: ATI 3D Rage Pro
First AGP Pentium motherboard: FIC PA-2012 (2 Nov 1997)
First AGP Pentium II motherboard: FIC KL-6011 (26 Aug 1997)

The first thing to understand about AGP is that it's not exciting. In fact it's deeply, deeply boring, but it is also absolutely pivotal to the success of gaming-focused PC industry that we know today. Technically it wasn't unique or even revolutionary: it was just an extension of the existing 66MHz PCI 2.1 specification. The only difference really was that it had some enhancements designed specifically to handle textured 3D graphics and provides bandwidth exclusivity. In reality it's a bit trickier than that, of course, so let's take an in-depth look at how it came to be, as this is the slightly more interesting angle.

Note: this article is about consumer PC graphics at the 'affordable' end of the spectrum, with a focus on gaming. I'm also not getting heavily into the technical workings of AGP, as this is very well documented elsewhere. The Introducing AGP article from the September 23rd issue of PC Magazine is a good primer, while Anand Lal Shimpai's AGP Explained article goes into more technical depth. There's also the official Intel docs listed at the bottom of this page. The scope of this article is an historical perspective.

3D Takes Centre Stage

Prior to 1996, smooth 3D games on consumer PCs were only possible through some fiendishly inventive coding and a good CPU. If you wanted to play Doom, you needed a 486. Oh, you want to play Quake now? Buy a Pentium. Although out of the reach of most bedroom gamers in 1994, a Pentium-based system sporting a PCI graphics card was the nearest you could get to gaming graphics nirvana on a PC. The mainstream-focused Pentium 75 hit the market just before Christmas '94 and the following months saw hundreds of thousands of families purchasing their first IBM-compatible PC.

It was when RAM prices began to fall in 1996 that 3Dfx Interactive brought their Voodoo technology to the platform, establishing the PC as a legit gaming machine for the first time. Gamers could at last enjoy arcade-style high res, 3D, texture-mapped graphics in their PC games. But the limitations of the PCI bus were already being pushed, specifically the bandwidth between the system memory and the expansion cards themselves, such as graphics and storage. In an interview late in 1997, just after AGP came to market, John Carmack said:

"The biggest problem we have on 3Dfx right now is texture paging. Not triangle rate, not fill rate, it’s textures."

Scott Randolph, programmer of the Falcon 4.0 engine at Spectrum Holobyte, eloquently made the case for AGP at the developer conference in May 1996. He claimed that software 3D rendering typically used 80% of the CPU's processing time and filling pixels 'overwhelms' the PCI bus. The point was made that a Pentium running at 90MHz with dedicated 3D hardware outpaced one running at 166MHz using software rendering. While dedicated 3D hardware had solved this problem, it was still being held back by the system architecture itself.

PCI: The Limitations

Polygonal graphics had been used quite early in the PC's history, but it was the rise of texture mapping that had started saturating bandwidth. Devices using the PCI bus had to share bandwidth, which made it very difficult to guarantee graphics throughput. This negatively affected the speed of copying textures, for example, from main memory into the graphics RAM. By providing a dedicated connection to the system bus, AGP provided higher speed and non-shared bandwidth. The theory was that this would make it possible to keep the textures in system RAM, saving the time of transferring them over the bus and saving the cost of fast RAM on the video card. Additionally, the data and address buses were not multiplexed as on PCI, providing a further performance bump. Surprisingly, for what was high-end consumer tech at the time, one of the main motivations for AGP was cost saving. From version 1.0 of the AGP spec, published 31 Jul 1996:

"...3D rendering data structures may be effectively shifted into main memory, relieving the pressure to increase the cost of the local graphics memory ... Reducing costs by moving graphics data to main memory is the primary motivation for the A.G.P."

While the theoretical throughput of PCI was 133MB/s, cards were realistically operating at the 50-60MB/s range, while a 60Hz texture-mapped polygons at 8 bits per pixel with mipmapping demanded 96MB/s. AGP, with its 200MB/s specification, was designed to solve this problem with room to spare. Even without AGP-specific features, an AGP slot behaved like a 66MHz PCI slot. Intel obviously decided that just creating a dedicated PCI bus for graphics (like Micron PC's Samurai chipset did) wasn't going to be enough.

Bringing AGP Into Being

The first revision of the AGP specification was completed by Intel in December 1995 and was first announced at the 1996 Windows Hardware Engineering Conference (WinHEC) in April, followed by the inaugural AGP Developers Conference during May 30-31. Presentations (which can be downloaded here) were given by a number of people involved in the technology:

  • Mike Aymar, VP and General Manager of Desktop Products Group at Intel Corporation gave an overview of the tech. The main point of his presentation seemed to be about getting arcade-quality 3D graphics onto volume PCs, so it was obviously recognised as a growth market.
  • Dean McCarron of Mercury Research talked about the history of graphics hardware on PCs, from MDA/CGA right up to software-rendered 3D and the challenges being faced by 3D hardware.  Intel's endorsement of Direct3D was very apparent during the AGP briefings, with the alliance being referred to as "great 3D".
  • Paul Richardson, Technical Evangelist at Microsoft, talked a lot about operating system support and the bandwidth limitations of PCI.
  • Jay Torborg, Director of Graphics and Multimedia at Microsoft, gave a technical run-down on DirectX and emphasised the importance of polygons/s and pixels/s rates, their importance to the performance of 3D graphics, and the role AGP would play in guaranteeing these.
  • Michael J. Allen, Jeff Lauruhn and Norman Rasmussen of Intel discussed the electrical, mechanical, and protocol aspects respectively in incredible detail. They also emphasised the increased data rate of AGP 2x, one of the key upgrades from PCI.
  • Finally, John Davies the Director of Marketing for Consumer Desktop Products at Intel gave attendees a bit of a pep talk. He promised them that, if hardware and software vendors work closely together, they could grow the 3D graphics sector by a factor of 10 by 1998, with a target of arcade-quality graphics on the PC by the 2nd half of 1997. The Accelerated Graphics Port Implementors Forum was created to aid this, so that developers and OEMs could interact, access technical resources and attend workshops.

After releasing version 1.0 of the AGP specification on 31 Jul, hardware and software developers started in earnest the race to produce the first working samples. The race was on.

The Players

Cirrus Logic not only claimed to have produced the first AGP chip to be sampled (i.e. physically sent to card manufacturers so they could integrate it in their products) with their GD5465-based Laguna3D-AGP on 3 Feb, but also the first card to be demonstrated in Microsoft's Memphis operating system - a beta release of Windows 98 running DirectX 5.0 - a month later. Part of the reason Cirrus Logic were so quick off the mark was that their existing PCI-based GD5464 chip already supported storing textures in system memory. Cards based on the new chip were available to buy on 26 Aug, also being notable as one of the earliest cards to be equipped with RAMBUS's emerging RDRAM tech. According to Mercury Research, the performance of these cards was 'glitchy' at best, which is possibly why the chipset wasn't more widely adopted as the year went on. Here's a quote from their quarterly publication Accelerating PC Graphics from Q1 of 1997:

"The 5465 was announced in early 1997, and is Cirrus’ (and quite likely the industry’s) first ... AGP component. The device extends the 5464 with the AGP port and support for system-memory textures in the AGP environment."


Trident
, the 3rd largest graphics chip manufacturer at the time, claimed to have had "the fastest mainstream 3D graphics accelerator on the market today" in their 3DImàge 975. Their efforts to make an AGP version were announced at CeBIT, held in Hannover, Germany on 28 Feb. Trident claimed it was the first chip to 'meet the basic requirements' of the technology in a press release dated 24 Mar. Jaton, the "largest" PC expansion card manufacturers of that time, announced they would use the 975 chipset on Jun 3. The 985, a faster version supporting AGP 2x, appeared soon afterwards and was being "sampled in limited quantities" at the end of August. This card also employed RDRAM. At the time FIC's socket 7 AGP board was released at the beginning of Nov, this card and ATI's effort were apparently the only ones to support 2x mode.

3Dlabs threw their hat into the ring on 24 Mar, announcing that their GLINT Gamma chip was 'expected to be the first AGP-compliant graphics product' but, as we know, Cirrus Logic's Feb announcement puts paid to this claim. They announced their PCI Permedia 2 card in May and an AGP variant was used by FIC to benchmark their KL-6011 board at the end of Aug. Shipments of the card were officially announced on 18 Aug but Tom's Hardware cite Diamond's Fire GL 1000 Pro as "one of the first AGP cards available" so they can't be ruled out.

NVIDIA were still very much a fledgling company at the time. Following the failure of their NV1 architecture, when Direct3D made its quadratic texture mapping technology irrelevant, they were understandably nervous to go 'all in' with AGP. They did promise to release "the industry's first 3D multimedia accelerator [on] ... AGP systems" at Intel's Visual Computing Day, announcing their RIVA 128 chipset at WinHEC a month later. Although their chip was the choice of some of the first AGP cards, such as Diamond's Viper V330 and STB's Velocity 128, these were AGP 1x models so neither qualify as the first card. This moment marks the beginning of a somewhat prosperous future for the firm, however.

Rendition had built a reputation for producing impressive and innovative 3D hardware since their V1000 chipset was unleashed in 1996. The PCI card's integration of both 2D and 3D capabilities set it apart from 3Dfx's Voodoo, and earned the honour of being the first card to support Quake in hardware. Their Vérité V2200 chipset was also demonstrated at WinHEC, with review hardware appearing by 5 Aug but also limited to AGP 1x.

S3 were expected to be strong players, having dominated the consumer 2D marketplace with their Trio64 line of chipsets and holding 43% of the market in Q3 of 1997. Their Virge/GX2 chip was unconvincingly announced at WinHEC on 8 Apr and didn't see anything like the adoption rates that other manufacturers enjoyed. Like everyone else, they showed off physical hardware at Comdex that November, but they can't be ruled out either due to very early mentions.

ATI's 3D Rage Pro also lays claim to be the first AGP graphics chip to be demonstrated at 2x mode, debuting at Intel's Visual Computing day on 24 Mar, nearly a month after Cirrus Logic's product was officially released. This is backed up by the June issue of Wave Magazine, so it could be argued as the first 'legitimate' AGP graphics card based on all these factors. This was still the case in November according to Thomas Pabst of Tom's Hardware.

Matrox were in pole position to take a stranglehold on the business 3D graphics market, with their Millennium II card widely considered to be the best performer around mid '97. They seem to be the only company that showed no interest whatsoever in being 'first', which is unsurprising considering their reputation for high performance backed by rock-solid drivers. They announced the AGP variant of the Millennium II - boasting their MGA-2164W processor - in September with full optimisation for the new bus. The card was widely adopted by system integrators, many of which were demonstrated at Comdex Fall that year.

Number 9 also sunk their teeth in, not just producing cards but also producing a chip of their own. They announced sampling of their AGP-supporting Ticket To Ride chip on 15 May, which is pretty early but not early enough. Their Revolution 3D card based on this chip was officially released to retail on 25 Aug, to coincide with Intel's release of their motherboard chipset, which would have been a pretty solid shout for 'first card' were it not for ATI's efforts.

Intel developed a graphics chip in conjunction with Lockheed-Martin's Real3D division called the i740 (codenamed Auburn) in parallel with the 440LX chipset. It was intended to showcase AGP at its best and had no on-board texture memory at all. They managed to produce a prototype in time for Comdex '97 but didn't officially announce the card until February '98. It's almost as if they delayed it deliberately so that other chip makers would push the technology instead, as there were significant fears that Intel was trying to take over the 3D hardware market, as they had done with motherboard chipsets.

What of 3Dfx, I hear you ask? It's difficult to get into this subject without bringing up the whole sorry story of how things went down, but I'll try to be brief. It seems that AGP threw a bit of a spanner in the works for them in '97. Their VSA100 chip was designed to be scalable from the beginning, a feature no other graphics chip on the platform could boast. Given that their Voodoo2 chipset was announced on 3 Nov, they had obviously spent '97 developing their PCI product while everyone else was chasing AGP. Although it was compatible with the new interface, the Voodoo2's key feature was SLI (Scanline Interleave), which allowed two cards to be linked together to increase performance. With AGP being a single-slot deal, only Quantum 3D produced an AGP Voodoo2, with their eye-wateringly expensive Obsidian card, while everyone else had to use up 3x PCI slots (including the requisite 2D card) for the same thing. Although the V2 took the industry by storm with its performance when it was released, the competition was moving so rapidly that things didn't work out well for them at all. 3Dfx never took AGP seriously, even with later products, so they do not belong in this story.

Related to the downfall of 3Dfx was NEC's PowerVR chipset. Their PCX2 card was released in April '97, and their next-gen chip saw a delayed release on the PC after it was adopted by Sega for their ill-fated Dreamcast console, a contract 3Dfx lost. As such, they made no overtures towards AGP whatsoever at this stage of development. VGA stalwarts Oak, meanwhile, released an AGP version of their WARP 5 at some point during Q4, after initially releasing the accelerator at E3 in July '97 without a single mention of the emerging tech.

The First AGP Graphics Card

Identifying the very first AGP card (which was the original motivation behind this article) depends on your criteria. First you have the graphics chip itself. Once a design has been finalised, it is 'sampled' i.e. manufactured in limited quantities and sent to graphics card makers such as Diamond or STB (unless you're Matrox or ATI who made their own boards). Once evaluation hardware and drivers have been produced, these are tested, refined, and eventually made available for sale through retail channels. Some existing graphics chips could be easily adapted to AGP, although many of the first AGP cards were simply PCI models with an AGP connector. This somewhat undermined AGP's performance because, to take full advantage of the new bus, the additional features of AGP must be supported and this usually required designing a brand new chip. This made significant demands on the finances and resources of the industry's chip makers and may have actually broken a few of them.

There are a couple of key dates in identifying the first board and the first is Intel's Visual Computing Day, on 24 Mar 1997. Here, cards were announced from ATI, Cirrus Logic, S3, Trident, and 3Dlabs, and hardware was demonstrated by each. How well that hardware was working (they would have been engineering samples) is another question. If we fast forward to Mercury Research's report in November (reflecting tests performed around September), they included working boards from #9, ATI, Matrox, 3Dlabs, S3 and NVIDIA. Only ATI, S3 and 3Dlabs are common to both lists, but ATI's card was the only one capable of 2x mode.

The boring truth of the situation is that a board doesn't really exist until it's available at retail, as anything prior to this would be engineering samples or evaluation hardware. These don't really count because they are like ghosts. This brings us to key date no. 2, which was the official launch of the 440LX chipset on 25 August 1997. If we look at the press releases on or around that date, we can see that a number of cards were released simultaneously:

  • NVIDIA announced that Diamond and STB would be using their RIVA 128 chip.
  • Cirrus Logic announced volume shipping of their Laguna3D board.
  • ATI announced two different AGP incarnation of their 3D Rage Pro in the XPERT@Work and XPERT@Play boards.

These three chip makers take the joint 'first AGP card crown' officially, but no one likes a tie so ATI are announced as unofficial winners based on the fact that theirs was the only AGP 2x card. Trident are out of the running because they had only just started sampling their 3DImage985 chipset, while 3Dlabs were in the process of shipping their Permedia II to board manufacturers for development at this time. Matrox didn't announce their AGP Millennium II until September.

The First AGP Motherboard

This is somewhat easier. Although VIA's AGP-capable, VP3 chipset was announced in June, the first motherboard chipset to appear was Intel's. The specs for their 440LX chipset were unveiled in Jul 1997, with motherboard details released a month later. On 26 Aug, the day Intel's chipset hardware itself was formally released, it was FIC's KL-6011 that was the first AGP board to retail, despite Intel's own AL440LX and NX440LX board being announced that month.

An interesting point to note is that Intel didn't produce a chipset for the socket 7 platform, perhaps intending to leave other CPU manufacturers such as AMD and Cyrix - who couldn't use Intel's patented slot 1 - out in the cold. Via Technologies came to save the day, with their VP3 chipset. Pre-production versions of FIC's PT-2012 motherboard, released on 2 Nov, were the first to use it.

Implementation

Remember that the primary driver behind AGP was cost-saving. The idea was supposed to be that, by storing textures in system RAM and transferring them as required into a comparatively small - but fast -cache on the graphics card, large amounts of 'expensive' video RAM weren't needed. The standard amount of video RAM on most cards was 4MB, although the type of RAM varied between EDO, SGRAM and RAMBUS. By the time AGP cards were fully developed, memory prices had dropped far enough that board manufacturers were quite happy to store textures on the card instead. AGP cards that were simply PCI cards adopting the new connector took advantage of the dedicated bus and increased frequency, but not any of the AGP-specific features such as 2x data transfers and side-band addressing.

From a software perspective, buggy drivers were an issue for a number of cards, as we'll see, and they worked in conjunction with Intel's VGARTD.VXD (virtual device driver) which enabled AGP feature support in Windows 95. This support became official as part of OEM Service Release (OSR) 2.1, which was released by Microsoft on 26 Aug '97. Note that the public version of DirectX at the time was 2.0a.

Although most cards were officially available to buy at Comdex Fall that year, some were available sooner but most were pre-release hardware.

Early Benchmarks

The earliest, publicly-available benchmarks of AGP cards I've been able to find come from FIC, in an evaluation of their KL-6011 board on 25 Aug '97. They ran tests using the DirectX-based 3D WinBench 97, under Windows 95 on a Pentium II 300MHz system. Initial results indicated that AGP performance was vastly superior to PCI, with AGP versions of the Permedia II and Rage Pro scoring 170 and 179 respectively, while a PCI Matrox Mystique scored 55.7.

Something that was common among desktop 3D cards of the time was that certain 3D features, such as fog tables, were either not implemented or were implemented badly. Such advanced features were the reserve of high-end cards such as ELSA's legendary GLoria chip. This was demonstrated by benchmark results showing the unrefined nature of AGP-based hardware and software at the time.

The Cirrus Logic and Trident offerings (both using RAMBUS memory, incidentally) barely cross the line, while ATI's card does a respectable job but is outperformed across the board by the Permedia II. ATI's card may have been the first to market, but it wasn't the most credible product at the time.

Anandtech's review of the Diamond Viper V330 (using NVIDIA's RIVA 128) at the end of September saw it outscore the Rage Pro's 191 in 3D WinBench 97 with a score of 280. Chalk one up to NVIDIA.

Here we see results of a test of high-end, 300MHz Pentium II-based systems in the 23 Sep issue of PC Magazine, again using the 3D Winmark 97 AGP graphics benchmark. They used an AST Bravo machine to compare the PCI and AGP 2x versions of the ATI 3D Rage Pro and found framerates to be 1.85fps and 18.6fps respectively, which is a jaw-dropping improvement. As you can see in the graphic above, the Dell, Gateway and Micron computers all used 3D cards based on NVIDIA's RIVA 128 chip and significantly outperformed the competition in 3D tests (except for the AGP-specific one, which the Gateway couldn't perform). The AST used ATI's Rage, while the NEC sported Number Nine's Revolution.

Tom's Hardware put a bunch of AGP cards to the test at the end of October, and NVIDIA's chip, yet again, came out on top by some margin. ATI's card couldn't participate at the time because of driver issues, so there is no direct comparison at this point. The Permedia II put in a respectable showing though, particularly in OpenGL tests, while Number Nine's card languished behind. A more extensive round-up came at the beginning of November.

Mercury Research's Q4 review (Nov '97) of 3D accelerators told a similar story, using the more recent 3D WinBench 98 suite (featuring DirectX 5) and a 300MHz-based Pentium II system. Although they tested 28 cards, only 6 were AGP capable.

As you can see, the RIVA 128 tops the results again by a decent margin, but not a million miles away from the Rage Pro. Clearly the benchmark wasn't optimised for AGP, as the scores from each respective PCI equivalent (not shown) were faster, but by a negligible margin.

One factor Mercury struggled with in particular was drivers. This was particularly apparent with the 3Dlabs offering from Diamond, where the AGP card scored lower (317) than the PCI offering (352).

Performance was predicted to improve dramatically over time as drivers improved, but this is where we get into the first mention of controversy. In their Q4 report, Mercury explained that some vendors were expressing concern that competitors' drivers were, perhaps, 'too good'. This was allegedly achieved by sacrificing compatibility and accuracy for speed, with the conclusion that:

"The atypical performance of the “good” drivers raises the suspicion that something unusual is taking place."

This is something we'll come back to.

Once he had got all the drivers he needed, Thomas Pabst ran another group test of 3D cards in November. The results are reproduced here:

Yet again, NVIDIA's RIVA 128 is still dominating the scores, as it is used by the top 3 cards. Also observe no discernible difference between the AGP and PCI models, which again show that the test is not AGP-optimised. We do see that the inclusion of ATI's Rage Pro puts it ahead of the Diamond Fire GL (powered by the Permedia II), but some way behind the leaders.

The coup de gråce comes in the form of PC Magazine's insanely detailed group test of graphics cards at the beginning of December. Like we didn't know it already, NVIDIA takes the crown (again), and the same patterns as before are repeated.

I feel kinda sorry for Trident, S3 and Oak with their pathetic offerings tacked onto the end of the 'proper' results table. While ATI seem very much to have been the first to get a card to market, there is no doubt that NVIDIA won the battle of whose card was best quite early on. I think 3Dlabs should also get a shout for their early success and stable offering in the development of the Permedia II, although they're not around anymore to celebrate it.

Card Controversy

But there's a problem. Remember what Mercury Research said about something 'unusual' taking place? In Feb of '98, Tom's Hardware reported on this mystery, with some very intriguing findings. Notice how every benchmark I've shared has been in the same program: 3D WinBench. It seems that ATI had optimised their drivers to perform outstandingly well in this high-profile and widely-used test suite in an attempt to mask the hardware's deficiencies in real world applications such as games. 

AGP 2.0 aka 4x and the Pro Variant

One potentially confusing aspect of AGP is the naming convention. While there were only 3 versions (1.0, 2.0 and 3.0) released - before it was superseded by PCIe - each of these represented a doubling of the bandwidth (2x, 4x, 8x). Graphics cards and motherboards were usually advertised based on which speed they supported, rather than the version. Remember that AGP 1.0 represented both 1x and 2x speeds, while AGP 2.0 represents 4x speed, hence the confusion. Each time the spec changed, so did the voltage, so new cards couldn't be used in old slots and vice versa, although there was such a thing as a 'universal' slot. This has been expertly documented elsewhere.

Development of AGP 4x was announced at Intel's Visual Computing Day and was expected to be added to the official spec by the end of the year, but wasn't officially published until May '98. Not long after this, specification for AGP Pro was released, which was an extension of standard AGP intended for workstations, providing up to four times (110W) more power for industrial applications. It was also adopted by Apple in their Power Mac G4 range, albeit not until October 1999. They added an additional power connector to their boards to support their Apple Desktop Connector (ADC) monitors via a single cable.

New AGP cards are still available today, although they are somewhat utilitarian.

Competition & Litigation

AGP was intended as an open standard from the beginning. Intel believed, and stated numerous times, that a "reciprocal royalty-free license" would be the only way to foster rapid development of the platform. It became apparent through a 2001 court case, Intel Corporation v. VIA Technologies, Inc., that Intel probably only wanted this openness on Intel-based systems. Without wanting to get into it too much (again), Intel's competitors had been using their CPU socket designs since the '70s. Intel brought an end to this with the introduction of the Pentium II's slot 1 in summer '97, leaving the likes of AMD, Cyrix and IDT with socket 7 (I'm ignoring socket 8). It wasn't until 28 May '98 that AMD officially introduced their competing CPU, the K6-2. In order to support higher clock speeds, AGP and other technical improvements, AMD relied on 3rd parties such as SIS, ALi and VIA to design and fabricate motherboard chipsets for their new CPU, as they didn't make chipsets themselves. By extending the socket 7 specification, the 'Super 7' platform was born.

Intel didn't appear to intentionally obstruct these companies from making AGP work with their competitor's CPUs, but it's possible they didn't expect it to happen. They weren't far wrong, as AGP was plagued with reliability issues on Super 7 until the Althon's slot A platform was introduced. Taking VIA to court was the first evidence that Intel's open licensing of AGP was disingenuous, claiming that only the "baseline" features of AGP were licensed as such. In particular they argued that the new 'fast write' feature was excluded from the license, in an attempt to at least stifle performance on 3rd party motherboards. Unfortunately for them, the court rejected their semantic argument and dismissed the case. 

AGP's Legacy

There really isn't much more to say about it all. What took place in 1997 was AGP almost single-handedly setting the 3D gaming graphics industry on its path to the success that we recognise today. Prior to that, there were disparate efforts by many competing parties (led largely by 3Dfx), a bunch of proprietary APIs and a general headache for games developers and users alike. With Windows 98, Microsoft's DirectX platform began to be taken more seriously. Efforts from graphics card manufacturers unified the PC gaming platform with Windows, instead of DOS, becoming the dominant gaming operating system. Say what you like about Intel and Microsoft's dominance of the platform - their efforts in bringing arcade-quality games to the PC were a resounding success, especially considering how hard it had been, historically, to establish new hardware standards (*cough* EISA *cough* MCA *cough* VLB).

Although there were a total of 38 competitors vying for a piece of the 3D pie in 1998, we know how many chipset makers came out the other side: two. ATI were eventually acquired by AMD in 2006 and nVidia hired pretty much every 3D graphics expert in the industry, most of them coming from SGI's OpenGL dev team.

Footnote

If you have enjoyed reading this, please consider buying me a coffee via Ko-Fi. I try my best to make sure that everything I write is historically accurate by citing primary sources (over 100 in this article) and weaving together some kind of story from everything, but if you do think I've got something wrong, please comment below with a source and I'll be really happy to make corrections. I really enjoy writing about this stuff and it can be really time consuming! Also, I promise to give £1 of every donation to the Internet Archive, without which this article (and others I've written) wouldn't be possible. Thanks for reading :)

References

1996
28 Mar: Intel to roll out new 3D technology. Source: c|net
2 Apr: Intel runs graphics faster for cheaper. Source: c|net
9 May: ATI Joins AGP Implementors Forum. Source: ATI
30 May: Intel host AGP Developers Conference. Source: CaseText
30 May: PDFs from the AGP Developers Conference. Source: AGP Developers Forum
Jul: Avoid the traffic jam. Source: CGW
31 Jul: AGP 1.0 specification released by Intel. Source: Intel (PDF)

1997
3 Feb: Cirrus Logic samples industry's first AGP 3D graphics controller. Source: Cirrus Logic
28 Feb: At CeBIT '97 Trident showcases AGP technologies. Source: Trident
24 Mar: Trident's 3DImàge 975 now supports Intel's AGP. Source: Trident
24 Mar: 3Dlabs reveal GLINT Gamma chipset. Source: 3Dlabs
24 Mar: Leading graphics chip companies announce AGP-Enabled products. Source: Intel
24 Mar: 3D Rage Pro first chip to demonstrate support for AGP 2x. Source: ATI
24 Mar: NVIDIA announce first AGP card. Source: NVIDIA
24 Mar: Intel outlines 3-D graphics plan: Source: InfoWorld
31 Mar: Intel AGP spec to speed up graphics. Source: InfoWorld
Apr: PCI version of nVidia's RIVA 128 is released. Source: IEEE Computer Society
8 Apr: S3 announce ViRGE/GX at WinHEC. Source: S3
8 Apr: NVIDIA and SGS-Thomson announce RIVA 128. Source: NVIDIA
13 May: Matrox Millennium II "shatters all previously held Graphics Winmark records". Source: Matrox
15 May: Number Nine unveils "Ticket To Ride"
18 May: Permedia 2 announced. Source: 3Dlabs
2 Jun: VIA, not Intel, to be first with AGP Chip Set. Source: InfoWorld
19 Jun: Company perspective - ATI. Source: Wave Report
19 Jun: Product brief for Warp 5. Source: Oak
Jun: Developers begin receiving samples of Intel's i740 graphics chipset. Source: Gamasutra
Jul: Version 1 of 440LX chipset specification released. Source: Intel 440LX Datasheet (PDF)
1 Aug: Chipset guide - Via VP3. Source: Anandtech
Aug: Specifications for Intel's AL440LX motherboard. Source: Intel (PDF)
Aug: Specifications for Intel's NX440LX motherboard. Source: Intel (PDF)
5 Aug: Review of the Rendition Vérité V2200 Source: Anandtech
11 Aug: AGP and on-chip cache will speed graphics performance. Source: InfoWorld
11 Aug: Rendition's V2200 top in 3D benchmarks. Source: Rendition
11 Aug: Accelerating PC Graphics '97 Published. Source: Mercury Research
16 Aug: Intel AL440LX motherboard (266MHz). Source: spec.org
25 Aug: ATI's 3D RAGE PRO chips announced. Source: ATI
25 Aug: Intel Introduces 440LX AGPset. Source: Intel
25 Aug: FIC KL-6011 benchmarking report. Source: FIC
25 Aug: Jaton to use Trident 3DImàge 985 chip. Source: Jaton
26 Aug: Trident sampling limited quantities of 3DImage985. Source: Trident
26 Aug: Cirrus Logic ships Laguna3D-AGP card. Source: Cirrus Logic
26 Aug: FIC first to release 440LX board with the KL-6011. Source: ZDNet
27 Aug: Chaintech release the 6LTM. Source: ZDNet
28 Aug: 3DLabs' Permedia 2 announced, with AGP support. Source: EE Times
2 Sep: OEMs cautious about releasing 440LX boards. Source: SCMP
12 Sep: Matrox announce Millennium II AGP. Source: Matrox
14 Sep: Review of the Diamond Viper 330. Source: Anandtech
23 Sep: Review of 300MHz Pentium II systems. Source: PC Mag
28 Sep: AGP explained at Anandtech
28 Sep: AGP performance explained at Anandtech
Oct: Specifications for RIVA 128 chip released. Source: Thompson SGS (PDF)
21 Oct: Review of the STB RIVA 128. Source: Anandtech
27 Oct: Group test of AGP graphics cards. Source: Tom's Hardware
28 Oct: Review of Pentium II boards with Intel's 440LX chipset. Source: Tom's Hardware
29 Oct: Review of FIC's PA-2012, with the RIVA 128. Link: Tom's Hardware
2 Nov: FIC officially release the PA-2012, the first AGP-capable socket 7 board. Source: Tom's Hardware
3 Nov: 3Dfx interactive announces the revolutionary Voodoo2 graphics chipset. Source: 3Dfx
6 Nov: STB's Velocity 128 dominates reviews. Source: STB
9 Nov: 3D accelerator card reviews. Source: Tom's Hardware
17 Nov: Quantum3D announces support for new Voodoo2 chipset. Source: Quantum 3D
18 Nov: Matrox Millennium II AGP achieves wide-spread acceptance with top SIs. Source: Matrox
20 Nov: Intel show prototype i740 at Comdex Fall. Source: ZDNet
25 Nov: Interview with John Carmack. Source: Boot Magazine Archives
2 Dec: Graphics accelerators. Source: PC Mag
8 Dec: Intel aiming for business desktop systems with i740. Source: InfoWorld

1998
Jan: Version 2 of 440LX chipset specification released. Source: Intel 440LX Datasheet (PDF)
12 Feb: Intel announce i740 graphics chipset. Source: Intel
12 Feb: Intel enter 3D graphics market to stiff competition. Source: Computer Business Review
14 Feb: 3D Winbench 98 - Only a misleading benchmark? Source: Tom's Hardware
23 Apr: Maximising AGP Performance 2.1. Source: Intel
10 Mar: Review of Real3D Starfighter graphics card. Source: Anandtech
17 Mar: Test results of the most popular video accelerators. Source: IXBT Labs
24 Mar: Voodoo2 dominates independent 3D PC accelerator tests. Source: 3Dfx
4 May: Version 2.0 of AGP spec released. Source: archived at University of California (PDF) and Intel
28 May: AMD introduce K6-2 processor at E3. Source: AMD
25 Jul: < $99 2D/3D accelerators square off. Source: coolcomputing
Aug: AGP Pro 1.0 specs published. Source: Intel
2 Sep: Voodoo2 Accelerator Review. Source: Tom's Hardware
8 Sep: 3Dfx wins best PC hardware award. Source: 3Dfx

1999
Apr: AGP Pro version 1.1 specs. Source: Intel
Aug: AGP Pro version 1.1a specs. Source: Intel

2000
22 Nov: AGP 8x announced. Source: Eurogamer

2001
20 Mar: Intel Corp. v. VIA Technologies, Inc. Source: Casetext (Nov 2001, Feb 2003)

2002
Sep: Version 3.0 of AGP spec released. Source: Intel (PDF)

Which version of Windows 95 Supports AGP? at Computer Hope
How to Determine the Version of Windows 95/98/Me in Use at Microsoft
The Story of the 3dfx Voodoo 1 at Fabian Sanglard's Site
AGP Implementors Forum archives from 19971999 and 2002
AGP Overview at Intel from 1998 and 2002
AGP Tutorial at Intel
AGP Design Guide 1.0 at Intel
AGP Design Guide 1.5 at Intel
AL440LX Motherboard at Intel
82440LX Overview at Intel
Community at Iceteks
i740 Information Site at Intel
Intel i740 Specifications at retronn.de (PDF)
Coming Soon Magazine
AGP Compatibility for Sticklers at Playtool
Technology Evolution at AMD

1997 Press Release Archives
Rendition - STB - Cirrus Logic - NVIDIA - Matrox - 3Dlabs - Trident - PowerVR - 3Dfx - S3 - #9 - ATI - Oak - Intel - AMD

1998 Press Release Archives
3Dfx

Benchmark Programs for Older Systems



When I say older I mean pre-Pentium. Some will work on an XT or AT, but not all.

All these programs are best run under a clean boot in DOS. The only exception to this is when running tests on a drive controller, which may require its device driver to be loaded to perform at full speed. While many of these benchmarks are well-known and easily-obtainable, some are a little more obscure. A bunch of them (highlighted with a *) came from the BENCH_XT compilation, made available by user Ekb on Vogons and can be downloaded from here. I also used High Treason's benchmark pack (designated ^), which is here and includes some of the better-known tools to get you started. I have provided links for them individually where possible.

I have categorised each test into CPU & RAM, graphics and hard drive, though some programs cover all three categories.


CPU & RAM

TOPBENCH 0.38^

Duration: <10s
The Oldskool PC Benchmark, written by Jim Leonard, is intended for live performance tweaking of a system. As the program runs, it measures the speed of the computer and provides a match to a similarly-performing system in its database. This is most useful for virtual systems such as DOSBox, so that you can adjust the emulator's performance to match a particular PC e.g. a 486DX2/66. It's also a great way to check that your real system is performing at a level expected of it. The score provided for the system is influenced by CPU, RAM and graphics performance with some 3D code tests. You can even send your results to Jim for inclusion in a future release.

Landmark System Speed Test 6.0^

Duration: <10s
I run this with the /B option to skip the splash screen at the beginning, which requires a keypress otherwise. This is from 1993 and tests pure computational speed i.e. CPU, FPU and CPU-to-video memory transfers. It attempts to displays a measurement of the actual CPU frequency, plus a live readout of the 'effective performance' of the CPU and FPU by comparing it to an AT system (i.e. a 286 equipped with a 287). I initially thought this program was useful for identifying the actual CPU frequency, but it thought my DX2 was running at 220.330MHz. Not very accurate, then. Because it's live, you can test the effect of a turbo button, for example. Scores from this version can't be compared to previous versions, however, as the metric was changed.

Norton System Information 8.0^

Duration: <10s
The 'CPU Speed' benchmark aspect of this program identifies the type and speed of the CPU and provides a measurement on its 'computing index' score. This is, unfortunately, not a particularly useful or intensive test of speed (at least according to Jim Leonard, whose amusing analysis can be read here), but could be useful if you're using the same motherboard with different CPUs.

MAXSPEED

Duration: <10s
The readme for this wasn't distributed with the version I have, but can be found here. Not that there's much to read - it simply describes the program as freeware and that it is 'extremely accurate' at measuring the actual speed of the CPU. Apparently this differs from the speed the CPU is rated for but I would say is more interesting than useful. It was written by MAXUM computers and can be found in the MAXSPEED folder on the linked shareware CD, or the BENCH_XT compilation.

Chips & Technologies MIPS

Duration: ~25s
I used to have a little program that actually gave you the millions of instructions per second score for a CPU and it was handy when testing the performance improvement when I overclocked my AMD 486DX4/100 to 120MHz back in the day. This is not that program, and it does not measure MIPS, despite the name. What it does do is more useful than most, as it measures a variety of performance indicators. The only downside of this is that there seems to be a bug whereby any CPU faster than a 50MHz 486 causes most of the results to be unreadable. There is a good description of the program here.

Memory Speed 3.1

Duration: <10s
These is a freeware program by Dietmar Meschede and is dated 1996. There is not much more info on it except that it performs write, read and move tests within RAM to provide a measurements in megabytes per second. This is done using chunks of data that vary in size from 1KB to 2MB resulting in 9 separate measurements. There are quite a few measurements taken, but I take only the first result for each operation. It also has a complementary Video Speed program, described below. It can be found within SPEED300.ZIP on the linked shareware CD, or the BENCH_XT compilation.

CABT*

Duration: <10s
Also known simply as Benchmark, this was written by Robert Stanton in 1992 and is intended specifically as a non-synthetic benchmark, as in it runs an actual program and measures how well that program runs. It measures the 'number crunching ability' of your computer, according to the utility's splash page, so only a change in the CPU will affect the score. This is another program that requires an FPU and the result is given in seconds. It also provides a 'performance index', comparing the result to some other well-known CPUs. I can't find a download link for this program, so it's best to get it from the BENCH_XT compilation mentioned earlier.

VIDSPEED 3.2*

Duration: <10s
As you can tell from the name, this tool is mostly used for measuring video performance, but it also tests RAM transfers. I don't know if it's related to the program of the same name with version 3.1, but they seem to differ significantly. Running the program without options provides a help screen but for this purpose I use the command VIDSPEED *. The program can be found in VIDSPD32.ZIP in the linked ISO, or the BENCH_XT compilation.

CACHECHK 4.0

Duration: ~50s
Written by Ray Van Tassle in 1996, this program is apparently postcard-ware. I don't know if Ray still lives at the address in the readme, but I feel like I need to send a postcard either way now because I've run this so many times. It performs memory access timing tests and is useful for all things cache-related. It will tell you how many caches you have, how large they are, and how fast they are, so it's useful for diagnosing issues. It's also particularly useful for situations where you are changing the cache in some way e.g. upgrading the CPU to one with more L1 cache, or upgrading the L2 cache on the motherboard, or changing the timing settings in the BIOS.

System Speed Test 4.78^

Duration: ~3m45s (with 512KB of L2 cache)
Aka Speedsys, this is possibly the most-recognisable, best known and most popular benchmark tool because it does so damn much and it's freeware. It was written by Vladimir Afanasiev and the list of features in the readme is very long indeed. I use this program for the CPU speed index and the cache and RAM transfer speed measurements (and the other tests, described below). There is an archive of previous versions here and the old homepage is here.

Navrátil Software System Information 0.60.45*

Duration: <10s
This is mostly useful as a system detection tool, but also has some rudimentary benchmark capabilities, providing a CPU and FPU score in dhrystones and whetstones. It also charts this score in comparison to other common CPUs and can provide CPUID info, amongst lots of other info.

CPU Identification Utility 1.23

Duration: <10s
CPUCHK was written by Jan Steunebrink and has had a somewhat long development arc; this version was released in February 2013, and version 1.0 released in December 1997. Most of the information this tool can provide comes from a CPU's CPUID register. Sadly a number of the CPUs I tested either do not support this feature, or CPUCHK was unable to read it. Programs like AIDA or NSSI can be tried as an alternative and there are online databases that can be used to cross-reference chip markings and photos. 1.26 is the latest version.

Graphics


Landmark 6.0^

Duration: <10s
The video performance aspect of this program measures RAM to VRAM transfers in characters per millisecond, so it's a text-based test rather than graphics-based, but provides an accurate measurement of bus transfers to the video card.

3D Benchmark VGA 1.0^

Duration: ~20s
Aka Superscape, this is a public domain utility created by New Dimension International and released in September 1990. It is based on their commercial SUPERSCAPE 'alternate reality' environment. An interactive version can be downloaded or run here, while the readme can be found here. It measures the FPS a system is capable of by rendering a 3D scene, and is influenced by the CPU type & speed, the cache, the video card bus width and the 'efficiency' of that card.

PC Player Benchmark 1.0^

Duration: ~30s
This utility is by Markus Oberrauter of German magazine PC Player (not to be confused with the English magazine of the same name), which was released for free on their cover CDs in late 1996. It works in a similar way to Superscape in that it renders a 3D scene and presents an FPS score at the end. It runs at a resolution of 640x480 by default but is usually run with the /VGAMODE switch for slower systems. It can be found in the CBENCH folder of the December 1997 Cover CD linked above, or the BENCH_XT compilation.

Doom 1.9^

Duration: ~90s
The benchmark mode of Doom is run with the command DOOM -TIMEDEMO DEMO3 (other demos are available), which renders a demo that is 2134 frames long. A framerate figure is reached by multiplying the frames by 35, then dividing the result by the realtics score. This score is heavily influenced by the speed of the CPU, RAM and graphics card.

Chris's 3D Bench

Duration: ~30s
Sadly this program's original web page has not been archived so it's difficult to find out more about it, but the first reference I can find to it is from 1998. It runs a 3D, environment-mapped routine (not dissimilar to the DirectX cube test) to give a result in FPS. It is affected by CPU, FPU memory and video speed and requires an FPU to run. This suggests the program is from a time post-486, when all desktop CPUs had an integrated floating point unit. There are separate executables for VGA and SVGA modes, though I only use the former.

Video Speed 3.1

Duration: <10s
This program, which comes with the Memory Speed utility (above), runs tests that measure the speed of transfers from main memory to video memory over 8-, 16- and 32-bit bus widths, producing scores in MB/s and FPS, the latter being the only score I recorded. As with Memory Speed, it can be found within SPEED300.ZIP on the linked shareware CD, or the BENCH_XT compilation.

VGAFPS 1.46*

Duration: <10s
I can find no info on this program at all, and it doesn't come with a readme, but it appears to transfer data from CPU registers into video memory, providing a measurement in KB/s and an equivalent 'frame rate'. Run the command VGAFPS to output the result to the screen, though you might need to run it multiple times to get a proper result as it can be inconsistent. Can't find an individual download anywhere so find it in the BENCH_XT compilation.

VESATEST

Duration: <10s
A program written by Vogons user RayeR aka Martin Rehak and requires an FPU. It identifies the VESA VBE version of the graphics card and the resolutions available, plus the amount of video memory (VRAM) available. It then measures transfers between the LFB (linear frame buffer) and VRAM, providing an FPS score, plus a measurement of the transfer speed in MB/s. It can also measure the current refresh rate.

VMax256 1.11*

Duration: ~20s
This program from 1996 appears to be by a Russian only known as Nomagic. It tests the throughput of different video modes in 8-, 16- and 32-bits. You can measure from 320x200 up to the max resolution of your card, but I just stuck to basic VGA. The results are provided for each bit width and are in FPS (in brackets). It can also test the RAM speed but I discarded this result. I use the command VMAX256 /x400 /x480 /x600 /x768 /x1024 /c200


VIDSPEED 3.2*

Duration: ~15s
Measures read and write speeds for video RAM and normal RAM in KB/s at 4-, 16- and 256-colour modes (CGA, EGA and VGA). Running the program without options provides a help screen but I usually use the command VIDSPEED A J L which tests CGA, EGA and VGA. Other modes are available. The program can be found in VIDSPD32.ZIP in the linked ISO, or the BENCH_XT compilation.

3DSPACE 1.2*

Duration: ~40s
There's no documentation for this but it renders a texture-mapped, 3D environment not unlike Wolfenstein 3D, but more brown. At the end it provides a percentage score of how 'ideal' your computer is, where 100% is the 'most ideal'. A table of comparable results is provided at the end of the benchmark. This is another one I can't find a direct link for, so find it in the BENCH_XT compilation.

Morph 3D*

Duration: ~30s
Written by Cory Sharp, this tiny program written in assembler renders some nice 3D shapes with rotation and zoom effects and provides a FPS score at the end. It runs indefinitely so I just quit it after 30s, though this an arbitrary amount. Get it from the BENCH_XT compilation.

Wolfenstein 3D*

Duration: ~20s
Yes, although the benchmark feature of Doom is widely known, Wolf 3D (specifically the WOLF_286.EXE version linked above, or the BENCH_XT compilation) also has such a feature if you run it with the TIMEDEMO option. The results given are much the same as with Doom (ticks and frames), except it calculates the FPS for you.

System Speed Test 4.78^

Duration: <10s
Speedsys can provides a VESA memory transfer measurement in KB/s. If that's the only measurement you want, you can just cancel further tests as soon as the program loads.

Hard Disk


Norton System Information 8.0

Duration: <10s
Aka Sysinfo, this program has a few useful benchmarks and can measure drive performance. It's worth mentioning that, if you have a caching controller or something SCSI, you will get a message saying that the results will not be accurate. This is because the controller blocks the 'drive seek' test, so it comes out as zero usually. It does measure the data transfer rate in KB/s either way. It also provides a 'Disk Index' metric, but I don't know how useful that is yet.

QDI Mark

Duration: <10s
This tool was included with drivers for QDI hard disk controllers and measures data transfer rate (KB/s) along with the average and track-to-track seek times.

Core Disk Performance Test 2.7*

Duration: <10s
This is an older tool from 1986 and provides hard disk information plus the usual performance measurements. It also provides a 'performance index' for fun. Obtainable from the BENCH_XT compilation.

Disk Meter 1.3*

Duration: <10s
By Procom Technology from 1989, this gives more extensive performance info. Rather than a basic transfer rate, it can measure random, sequential and buffered measurements in KB/s, plus average, maximum and track-to-track seek values in milliseconds. My testing has shown this program to be unreliable on faster disk subsystems, as the variance for the buffered transfer rate measurement can vary by 50% or more.

4 Speed 1.0*

Duration: <25s
This rather fancy program, by Dustbowl Designs from 1993, draws a live graph on screen as it measures the transfer rate of the disk. This makes it much easier to show the performance quirks of cached disks, for example, as an average will only give one figure, while the graph shows the point at which performance drops off. The graph can be saved as a PCX for later analysis and be represented as a line- or scatter-graph. Find it in the 4SPD100.ZIP file on the linked ISO, or the BENCH_XT compilation.

System Speed Test 4.78

Duration: ~15m (2GB drive)
Speedsys has the most extensive set of hard drive tests, with a short or long test suite available. I always use the 'short' test, which takes bloody ages anyway so I'm disinclined to do the long one. It does provides geometry info, access time, plus min/max/avg values for verify speed, linear read speed and buffered read speed. For some drives it can even show the RPM. It also provides a 'speed index' for the storage subsystem. There does appear to be an issue that I've noticed with the linear read speed test (the yellow line), which can appear to get near the end but never complete. It's safe to press escape to end the test and still keep the readings up to that point.

Monday, 17 October 2022

Doom Multiplayer on a Laptop in DOS Using TCP Over Wi-Fi

Welcome to this detailed article on how to play multiplayer Doom via TCP wirelessly (and/or wired) on a DOS laptop.

The traditional Doom multiplayer experience involves chunky PC desktops or towers with CRTs and speakers. But what if we could do the same wirelessly, using old laptops? The great thing about laptops is that they have a much smaller footprint, especially if they have built-in audio, and some still run on their original batteries (both my Toshibas do).

Doom over Wi-Fi has definitely been done before. I'm pretty sure it's possible to play multiplayer Doom wirelessly using modern hardware and emulation, but this article is not about that. It's about how to achieve the same on original hardware: older laptops based on the 486 and Pentium family. The target audience of this article is someone who has one or more PCMCIA-equipped laptops (and Ethernet-equipped desktop/laptop computers, optionally) that you want to play multiplayer Doom on. There are projects on how to bridge Ethernet to Wi-Fi on a PC of any age, for example, but this particular article is about minimising the hardware involved so that it's truly portable and as era-correct as possible. 

Contents:

1. Introduction

Sorry to start with a disclaimer, but this is the Internet, so...

DISCLAIMER: this project has emphasis on 'fun' rather than accuracy. I have spent many hours consulting various sources to ensure that the information enclosed here is correct. Where I'm not sure of something, I have made this clear. This whole process is currently experimental and work-in-progress and the more people that get involved, the more successful and accurate it will become. I make few guarantees and hope that, by reading this article and having a go, you accept the risks (and fun) of potentially getting things wrong and maybe wasting a bit of money on buying stuff that doesn't work, for example. It happens in this hobby. These kind of situations are great opportunities to learn and pass on information and that's the spirit of this article. If you do find out something that contradicts what I've stated here, or adds to it, please let me know. Thanks!

Also, in order to keep this article relevant, I make some quite big assumptions that you have a good working knowledge of DOS, such as how to copy files, run programs, how memory works and how to edit startup files, because that's too much to explain here and there's plenty of info elsewhere. There is not an abundance of info on Wi-Fi under DOS, so I'd like to stick to that. I also mostly assume that you have worked with wireless networks, wired networks and PCs before in some way and understand terms like 802.11b, IP address, subnet, WEP, PCMCIA, access point, hexadecimal, Ethernet, ISA, PCI, ISO, conventional memory, etc. so if you don't understand something, that's another opportunity for you to research stuff. (I do also partially explain some of these things anyway because I'm me.)

Note: all the links in this article work at the time of publication (Oct '22). If you find that a link doesn't work, it's possible the site or page was taken down. You can try locating an old version via The Wayback Machine at the Internet Archive by simply pasting the link in there.

2. TL;DR

Although this article attempts to cover one small subject, it has ended up being... quite long. Over 5,000 words, in fact. As such I've composed this 'too long; didn't read' section for advanced users who just want the gist of what to do so they can get on with it. It assumes that you already have Ethernet cards installed in your desktop PCs, at least one laptop with PCMCIA, and DOS 6.x plus Doom (same version, 1.2 or above) on all computers involved. Here are the steps in basic terms:

  1. Setup an 802.11b network.
  2. Acquire a Lucent Orinoco compatible PC Card (one for each PC to be connected).
  3. Download the ISO containing the drivers and install the Card Access Driver (WVLANCAD.SYS) according to the manual.
  4. Configure the packet driver by editing PACKET.INI and setting the network name and station name.
  5. Run the Orinoco packet driver with the command WVLAN42.COM /L and do the same for whatever packet driver your Ethernet card uses.
  6. Optional: Install, configure (static IP is best) and use mTCP's PING utility to test your connection.
  7. Copy TCPSetup into your Doom directories.
  8. Configure TCPSetup by adding your IP address and such to WATTCP.CFG.
  9. Run TCPSetup (the readme explains parameters) and play multiplayer Doom!

3. Early Wireless Networking

Welcome to the main article! A bit of history and context is necessary before we get into it. In the era of Doom (let's call it the mid-1990s) it was rare for a laptop computer to have networking hardware built-in. It was more common for a modem to be included, but laptops of this era almost exclusively used expansions in the form of the PC Card. I won't say much about this (read more here) other than that it was a standard, introduced in June 1990 by the PCMCIA, designed to add functionality to laptop computers, including video grabbers, audio, SCSI, FireWire, networking, etc. Yes, PCMCIA is the organisation and PC Card is the product. See it as an ISA bus for laptops (later the CardBus standard was introduced, which was equivalent to PCI).

There were few wireless network products available at the time and there was no standard established for this, so competing products were incompatible. One such example was WaveLAN by Lucent (formerly NCR and AT&T), which is now very rare. No doubt people were playing Doom (and other games) over Novell-based networks in the mid-'90s, but any documentation that existed then would be hard to find and would lack general relevance. This is because the technology was standardised in 1997 and called 802.11. Lucent's new product adopted the name WaveLAN IEEE, which was incompatible with previous generations.

4. Wireless Networking in DOS

Given how well established Lucent's technology was, Apple decided to adopt it for their AirPort product in 1999, when the 802.11b standard was introduced. This was the first widely-adopted consumer Wi-Fi product and led many other members of the tech industry to do the same and introduce products based on Lucent's. The problem with all this is that DOS wasn't a particularly commonplace OS in 1999, and even less so in 2001 when Wi-Fi really became widespread, so manufacturers just didn't bother to make drivers for it. I have a number of 802.11b cards that only support Windows 95 and up. In fact the WaveLAN IEEE cards (later renamed Orinoco) are the only ones that have proper DOS support. Actually that might not be entirely true - I've read, and heard anecdotally, that Cisco Aironet cards also work in DOS, but I've not worked with these at all so cannot say with any confidence that they do. Maybe someday I'll be able to write a guide on this, too.

The only thing that made this entire project possible was that the drivers and documentation for the WaveLAN cards is so damn good and easy to locate. This is the manual I consulted in the process of writing this guide, if you're technically-minded or just curious.

5. Acquiring Hardware

Before you go any further, you're going to need these two things:

1. A wireless access point / router / base station capable of creating an 802.11b network

It's quite possible that the wireless-capable router you have in your home right now is capable of 802.11b networking. One modern router I owned until recently (by Virgin Media) had a 'guest network' feature capable of 802.11b. You only need to consult the documentation of your particular router to find out if it can do what you need.

The alternative is to get an original wireless access point or ADSL router from about 20 years ago. I don't have any advice on acquiring a suitable base station really, but one from a better-known manufacturer such as 3Com, Buffalo, Linksys, 2Wire, D-Link, DrayTek or Netgear may make things easier - they could usually be configured via a web interface and it will be easier to get the documentation online. Either way, there's a high chance you'll have to consult the manual for whatever you acquire, because that will tell you how to perform a factory reset and how to log in to configure it.

Security note: if you're new to this, one thing to bear in mind is that 802.11b uses an encryption method called WEP, which is fundamentally broken. This means that it's insecure, so you need to make your own decisions about what this means for your own network. If your access point is only going to be used to connect a DOS laptop to another DOS laptop then you don't need to connect it to anything else at all and it pretty much eliminates any risk. If you did want to connect it to desktop PCs, an easy way to manage this would be to have a completely separate network for your old PCs. Bear in mind that the type of 'guest network' I mentioned above on newer routers usually isolates wireless clients from the rest of the network for this reason, so while you can get Internet access, you won't be able to send network traffic between wired and wireless computers with this method.

2. A Lucent WaveLAN compatible PC Card

Although there are hundreds of thousands of these things in the world, many have been recycled, some of them will still be in active service and some of them are knocking about in someone's drawer of old crap. As a result, you will likely have to hunt one down. You will also need one for each computer you want to network wirelessly but they don't need to 'match' in terms of their model or brand, just their compatibility. eBay is unfortunately going to be the most successful way to do this, certainly if you're in the UK. You might also have luck with any other second-hand selling platform in your country or territory. They are beginning to become scarce, but I recently purchased one for £9.99 so this isn't going to cost you an arm and a leg.

Luckily there were hundreds of clones made of the Lucent Orinoco card. If you want to maximise the chances of you finding a compatible card, I have found an extensive list of products that use the Orinoco chipset for you to browse and consider. There may well be more, but this is the information that exists at the moment and, even then, the only way to know for sure would be to install one in a PC and see if it works. Generally speaking they all look the same physically, so that's a massive clue when you're hunting.

A Lucent WaveLAN Silver IEEE 802.11b PC Card

A Dell TrueMobile 1150 Series PC Card. Note the position of the Status and Activity LEDs and how they are in the same position as those on the Lucent card. This is your 'tell'

The only cards I can 100% guarantee will work so far (because I've used them in real life) have a * next to them, but listed below are some of the more common models that you are likely to come across and which, based on photos and documentation, I'm pretty certain are Orinoco clones:

  • *Lucent WaveLAN IEEE (silver / gold)
  • *Lucent / Agere / Avaya Orinoco (silver / gold)
  • *Avaya World Card (silver / gold)
  • *Dell Truemobile 1150 (model PC24E-H-FC)
  • *Enterasys RoamAbout 802 (models CSIWS and CSIBD )
  • Compaq WL110 / WL210 / WL215
  • ELSA AirLancer MC-11
  • Buffalo AirConnect WLI-PCM-L11
  • Sony PCWA-C100
  • IBM High Rate Wireless LAN PC Card (model 09N9863)
  • Toshiba Wireless LAN PC Card (model PA3064U-1PCC)

Also might be, but I can't verify because I can't find photos and/or documentation:

  • HP 150WL
  • Intel Pro/Wireless 2011

Some of these cards were also built-in to the access points themselves so you could salvage that way. For example, the original AirPort base station has a genuine WaveLAN PC Card in it. Weirdly, although the AirPort card itself uses the Orinoco chipset, it's not PCMCIA compliant - it just looks like it - which is why it's not on the list. Here are access points that I'm pretty certain have an Orinoco card in them, again based on careful research:

  • Apple AirPort Base Station (Graphite) (manual)
  • Lucent RG-1000 (manual)
  • Lucent AP-500, AP-1000 and Orinoco WavePoint-II (multiple external cards)
  • Enterasys RoamAbout Access Point 2000 (model CSIWS) (manual) (card is external)
  • Compaq WL310 Gateway
  • Buffalo AirStation WLAR-L11
  • Elsa LANCOM Wireless IL-11

And these maybe but I can't verify because of lack of documentation:

  • Dell RG1000
  • Buffalo AirStation WLA-L11
  • IBM Access Point Model 9085

The other option you may wish to pursue is making a desktop PC wireless. As far as I know, Lucent did not manufacturer an 802.11b-compliant ISA or PCI card itself. Instead they used a PC Card bridge (an ISA or PCI card that a PC Card can plug into) so, if you want to have a wirelessly-networked desktop computer, you're going to need one of these. As far as I can tell these are generic and should 'just work', but we all know how hardware manufacturers like to be dicks and lock down their products. Proceed at your own risk.


ISA-to-PCMCIA card bridge

6. Getting Started

Once you've acquire these bits of kit, we can get going. This is the hardware I used on this project:

  • Toshiba Tecra 740CDT
    • Pentium MMX 166MHz
    • 16MB EDO RAM
    • 13.3 Active Matrix TFT Display
    • 2x PCMCIA slots
    • CT65554 graphics chip
    • 2GB hard drive
    • Floppy drive and external CD-ROM (swappable)
    • Modem, serial, parallel, PS/2, IR, VGA
    • Crystal CS4232 audio, SB Pro compatible
    • Lucent Orinoco Silver PC Card
  • Desktop PC
    • AMD 5x86 160MHz
    • 64MB EDO RAM
    • 15" EIZO SVGA CRT monitor
    • S3 Virge/GX 4MB
    • 2GB hard drive
    • Miro Miroconnect 34 Wave (IBM MWave) SB Pro and GM compatible
    • 3Com Etherlink III (3C509) network card
  • Apple AirPort Base Station (Graphite)
  • Network switch to connect the base station to other Ethernet devices

And this is the software:

  • DOS 6.x installed on all PCs
  • Doom installed on all PCs (same on each PC, version 1.2 or above)
  • Software install CD for Lucent wireless cards
  • TCPSetup for Doom
  • Optional: packet driver for whatever Ethernet card(s) you have (Many herehere and here)
  • Optional: the mTCP suite of programs (for testing your connection)

Tech note: Toshiba laptops of this era (and possibly others) have an option in the BIOS to configure the PCMCIA slots as "PCIC" or "16-bit CardBus". Although the CardBus mode supports PC Cards (according to the manual), in my case I had to use the PCIC mode, so be aware that you might have to do something similar.

7. The Wi-Fi Card Driver

Note: To maximise the chances of success here, it would be best to pare back your system as much as is reasonable to eliminate potential problems in advance. The easiest way to do this is to physically remove other devices and disable their drivers by commenting them out in CONFIG.SYS and AUTOEXEC.BAT. You can always add them back in later. Alternatively, if you're using a boot menu, you could add a new section.

Perhaps surprisingly, many Ethernet cards (be they ISA or PCI) don't need a driver loaded in CONFIG.SYS in order to work. This may seem counter-intuitive to those of us that are familiar with the standard headache of installing sound cards and such. A utility can be run to configure the card, but those settings are stored on the card itself. Instead a driver is loaded from the command line for the network protocol you're going to be using. We'll come onto that later.

PCMCIA cards, however, do usually need a device driver and the Lucent Orinoco is such a card. There are a number of ways to install this software but first you need to download it from the Proxim website. I used the program 7-Zip to expand the contents of the ISO on a modern computer and then copied the files to floppy disk. Alternatively you may wish to just burn the ISO to a CD. The specific files we want are in the path DRIVERS\MS-DOS (or MS_DOS in some versions I've seen). There are 3 folders in here called CAD, ODI and Packet but we don't need the ODI folder for this. Although they're in separate folders on the CD, it doesn't matter where they end up on the target machine. I created a folder called C:\DRIVERS\NET, for example, and put them in there, but you may wish to just copy both folders as they are. You will need:

  • WVLANCAD.SYS from the CAD folder
  • The contents of the Packet folder

CAD does not stand for Computer Aided Design, which is the first thing my brain thinks of when it sees that acronym. Instead it stands for Card Access Driver. The WVLANCAD.SYS driver needs to be loaded via the CONFIG.SYS file on startup. This can be used in conjunction with something called Card Services for DOS, which are drivers providing support for PCMCIA cards. These drivers might already be installed on your laptop, so check and refer to page 122 of the Orinoco manual if you want to go that route (essentially it means you can use the driver without specifying any settings). Here's an example of how the driver is usually loaded, to be added at the end of CONFIG.SYS:

DEVICE=WVLANCAD.SYS /I=10 /B=1300 /M=E100

*Remember to use the full path to the driver e.g. C:\DRIVERS\NET\WVLANCAD.SYS

- The 'I' parameter specifies the IRQ for the card, much like a sound card or anything else. 10 or 11 are good ones to choose as they are usually available and often the default option for network cards.
- 'B' is the I/O port address in hexadecimal. Again, if you've ever set up a sound card, you probably came across the value 220 as standard for the I/O port (also typed 0220h). There are many possible values for this, but the manual cites 1300 and 340 as possible options, so best to stick to one of these if you're not sure. 300 is also often used for network cards.
- 'M' specifies the start of the upper memory range to be used by the card, also in hex. Working out which range to specify depends on your setup and requires some investigation, which follows.

We will need the program MSD.EXE (Microsoft Diagnostics, which definitely comes with MS-DOS 6.0 and upwards, and I recall using it with 5.0, too), which is capable of displaying some of the resources described above and which of them are available.

MSD's main screen

MSD's memory map page

Press M on the keyboard to open the memory map.

Being familiar with this page is very useful for DOS power users generally and, although explaining it fully is beyond the scope of this article, I'll try and demystify it a bit. (For a more in-depth explanation, check out Jim Leonard's excellent video on the subject at his Oldskool PC channel.)

The map will look different depending on what software was loaded on startup. In my case nothing extra has been loaded but, if EMM386.EXE or drivers are present, it will look different. There is a legend at the top of the screen indicating what the symbols mean. (I have combined two screenshots into the picture above to show the whole thing - normally you would have to scroll to see it all.)

What it shows is a map of the upper memory area (UMA), which is memory between 640K and 1024K. Sections of UMA are called upper memory blocks (UMBs). Most of these are unused by a standard DOS install, and a canny user can squeeze drivers and TSRs into these available areas to free up as much of the 640K of conventional memory as possible. Each block is defined by an address in hexadecimal from A000 to FFFF. If you look at the area between C000 and C7FF, it's coloured light grey, which means it's occupied by ROM - this is the video BIOS. The sections shaded black are 'available' and they are:
  • A000 to B7FF
  • C800 to EFFF
So, theoretically, we can use any block within these ranges in my case. Visually, the network card we're working with will occupy nearly 4 lines in the diagram above. For example, if the memory address E000 was specified, the LAN driver would use an area starting there and going up to EEFF (just short of the end of that section, which is EFFF). This isn't ideal because it leaves a small gap of available memory. Ideally we would avoid fragmenting the RAM like this, so we can shift it to the top of this memory area by starting at E100 instead. Then the small gap of memory is added on to the section available before E100. I don't know if this is making sense at all.

Advanced users: there is also the option of loading the actual driver into high memory. I'll leave it up to you whether or not you want to do this as it requires EMM386. If you do this, you should probably add an exclusion for this memory area, otherwise it could potentially load other programs there and cause issues. This is what my line looks like accordingly:

DEVICE=C:\DOS\EMM386.EXE RAM X=B100-BFFF

As mentioned though, it's generally better to keep things as simple as possible at this point because it will massively reduce the amount of potential problems and resulting troubleshooting. Let's get this thing working first, then we can tweak it later on. Doom uses a DOS extender, which means it doesn't give too much of a shit about available conventional memory. Other games might.

If you have done everything correctly, you should get a nice confirmation message when the driver loads on restart:


If not, you might get something like this:


In my case this was because the PC Card slots were not configured correctly in the BIOS. There might be other potential errors that the driver can produce, but I have no idea what they might be and they are not documented in the manual. This is where you're going to have your own ingenuity. Retro-computing Twitter is also a handy place to ask people for help.

8. Physical Network Setup (Optional)

This step is only necessary if you are combining desktop PCs into your multiplayer setup. The easy bit is having a network card installed in each desktop computer and connecting those cards via Ethernet cable to a switch, which itself is connected to your retro Wi-Fi access point. Most home routers have a switch built in, but usually only providing 4 ports. You may wish to expand your setup depending on your needs: I've got a basic 8-port, gigabit switch by 3Com that I bought years ago. This connects to my router, and my PCs connect to this.

You will also need a 'packet driver' for each network card that's installed. If you can't find the driver for your card herehere, or here, you're going to need to do some hunting. In my case, for example, you have to specify a software interrupt when you run the driver (so you could have multiple cards in one PC) e.g. 3C5X9PD.COM 0x60. That's literally all you need to do on a desktop PC.

9. Wireless Network Setup

I've gone with an original Apple AirPort Base Station (Graphite) for this because I had one back then and I know how it works. It doesn't have a web interface, however, and is a bit more of a pain to configure, so much so that I've written a dedicated article on the subject. 

Wireless access points can usually be configured in one of two modes: bridge or router. If you are connecting to an existing network, choose bridge. This makes the access point 'transparent' i.e. it just connects clients to your existing network. If you are creating a new network, separate from your existing one, configure it as a router. You can then have it running DHCP and everything else for your new network.

Whichever device you've chosen to use, we want to continue keeping it simple. So set up the network with a simple name that's easy to spell and has no special characters in it. DoomNet might be a nice idea. Also disable encryption to begin with, because we just want to establish if it works first. You might want to use WEP or MAC address authentication later but that's entirely up to you. 

10. The Wireless Packet Driver

Next we need to configure the packet driver. In the folder where you copied the drivers, there should be a file called PACKET.INI.

Tip: If you forgot where something is in DOS and you need to find a file on a drive, then you just change to the root directory (by typing CD\ so that C:\ shows as the prompt) then type DIR PACKET.INI /S or whichever file you're looking for - the /S option searches all folders on the disk. If you have more than one partition or drive, check there, too.

If you've installed DOS correctly, you should be able to use the DOS Edit program to make changes to this file by typing EDIT PACKET.INI. The default version of the file has a lot of information in it explaining the various settings so refer to that if you wish. Comments beginning with a semicolon (;) are ignored by the driver. Here's a version of the file that I've trimmed down to summarise the important settings.

Some lines from the PACKET.INI file

As you can see, only the top two lines aren't commented out as these are the absolute basic requirements to get this working. You can configure the other options later on if you really want to. All you need to do is change the Wireless_Network_Name value to match your chosen network name (make sure it matches perfectly), and set a Station_Name to describe your computer.

If you have configured your Wi-Fi card driver correctly in the previous step and have the card installed in a working slot, you should now be able to load the wireless packet driver. Note: my card would only initialise in the bottom PCMCIA slot, so try out different things if you're having problems. The packet driver is called WVLAN42.COM and should be in the folder where you installed the drivers. Load it by typing WVLAN42 /L. Once you have done this, you should see at least one light activate on the card (ideally the other will be flashing if it has connected to the access point correctly) and you'll get a message like this on the screen.


As you can see, it correctly reports the IO address we chose when setting up the driver in CONFIG.SYS, and the IRQ is displayed as hexadecimal, so it's 10 (0A follows 09). We can also see the MAC address and the interrupt (which can be changed in PACKET.INI if desired). It's possible you might get an error, though.


This is what is displayed if the card cannot be detected, if it's faulty, or if it's incompatible. If needed, the packet driver can be unloaded by typing WVLAN42 /U so you can try again after changing things around. I can only wish you good luck at this point.

11. Installing mTCP (Optional)

It's usually a good idea to test the connection before proceeding but you could actually jump to step 12 if you want to see if it works. If it does, then you don't need to do step 11 at all.

You will need to know the IP address of your gateway (aka router) or access point. mTCP is very small and actually fits on the same floppy I used to copy the drivers across. If you wish to consult the documentation it's here. All you need to do is copy the mTCP folder onto the target PC and it's done. The next step is to create a config file. Open EDIT again and include the following lines:

PACKETINT 0x60
IPADDR 192.168.1.221
NETMASK 255.255.255.0
GATEWAY 192.168.1.254
NAMESERVER 192.168.1.254

Obviously change the info above to whatever is relevant to your setup:
  • The PACKETINT setting must match whatever was displayed when the driver loaded in the previous step.
  • Because of how the next step works, it's really best that we use a static IP for IPADDR. I like to use numbers higher than 200, because these don't usually get used up by DHCP.
  • The NETMASK is rarely anything other than what's listed above for a home network.
  • If your access point is configured as a router, the GATEWAY should match your access point's IP address. If it's setup as a bridge, this should be your main router's address. The IPADDR value should also be in the same subnet, so if the gateway is at 10.0.0.1, then you need an IP like 10.0.0.221, for example.
Then save it wherever you want (I used C:\) and call it whatever you want (I went with MTCP.CFG). Finally you need to set up the environment variable so that mTCP knows where to find the settings. This is done by typing MTCPCFG=C:\MTCP.CFG (replacing the filename and path with whatever you chose).

Now you can ping your gateway. In my case I would do this by typing PING 192.168.1.254 and you should see the following output:


This means that each ping was sent, and received, by the gateway. Some network devices block pings. If yours does, you'll have to ping a different device on your network, ideally the other computer(s) you're going to be gaming with. This is the output you'll get if the ping command was unsuccessful:


This means the access point is offline (effectively meaning your PC is not connected to the network) or if the device you're trying to ping doesn't exist or is unreachable for some reason. This is not the article for networking troubleshooting tips though, sorry!

12. TCPSetup

If you've got this far, congratulations: you have reached the final step and are about to play networked Doom... wirelessly! TCPSetup is essentially an alternative to IPXSetup, which was the program Doom originally came with to create multiplayer games. It was later called iDoom, but then renamed iFrag for obvious copyright reasons. iFrag, however, used a 'tracker' - a server on the Internet that kind of hosted multiplayer games. A very clever and handy system, but that tracker system doesn't exist anymore so the software is obsolete. Luckily the original version of the program is perfect for simple LAN play.

This step needs to be completed for all computers: you need to edit the WATTCP.CFG file included with TCPSetup (it should be in the Doom folder where you copied it) and enter your IP address details. Make sure each PC has a different IP.

You also need to nominate an ID for each PC starting from 1. In this example, my laptop will have the ID 1 and the IP address 192.168.221, while my 486 will be ID 2 and have the IP 192.168.1.222 (see why static IPs are better?). To be honest, all this is probably better explained in the TCPSetup readme, especially if you are playing with more than 2 computers, so be sure to read that if I'm not making sense. The following command will be typed on my laptop:

TCPSETUP [game options] -NET 1 192.168.1.222

Look at the "General Parameters" section of the Doom readme for 'game options'. This is where you can specify whether you're playing co-op or deathmatch, set the difficulty, load WADs, etc. If you don't specify anything, it will start with defaults. The -NET part is necessary but not explained. The ID come next, which is then followed by the IP address of the other computer(s). As such, on the desktop computer, I would type the following:

TCPSETUP [game options] -NET 2 192.168.1.221

As you can see, this computer's ID of 2 follows the -NET part, and then the IP address of the laptop is typed after that. Press enter on one computer and you get the following screen:


The program will wait until TCPSETUP is launched on the other PC(s) and, if all is well, the computers should find each other pretty quickly and Doom will start up!

Conclusion

I really hope someone finds this guide useful. If you do encounter success, particularly with trying out Orinoco clones, I would love to hear about it. I can be found on Twitter (@brassicGamer) so feel free to tag me. I would also be happy to help with troubleshooting or anything that's unclear. Best of luck!

References

Version History

1.1 (21-10-22) Upgraded Enterasys RoamAbout PC Card to 'verified' compatibility status, minor edits.
1.0 (18-10-22) Original version of article.