At the beginning of the ’90s, the PC platform was often mocked by its rivals. Of course, PCs were much more powerful than, say, an Amiga 500. But the Amiga offered a flat memory address, while a DOS program could only access memory using cumbersome 64 KiB segments. And to add insult to injury, there was this strange 640 KiB memory limitation. No matter how much physical memory you had in your box, the utter most important Conventional Memory was limited to 640 KiB!
The Legend teaches us that Bill Gates once declared that “640 KB ought to be enough for anybody”, then designed MS-DOS to enforce this limitation.
The truth is of course a little more complicated than that.
This article brings back so many confusing childhood memories of MS-DOS and memory management – memories I wouldn’t wish on my biggest enemies. All kidding aside, this is a great insight into how memory is organised in MS-DOS.
We had some older lab computers where we set up DOOM lan parties. However having 4MB RAM each it was a difficult balancing act to have both network stack (Novell) and game having enough memory.
As far as I remember having all network drivers in HMA backfired, removing XMS to just below required amount of DOOM. So we had to tweak.
But still once everything was set up, there was nothing like fragging friends over and over again in E1M1.
Awww. *Hugs* Been there!
Agreed. Definitely something to bookmark to share with people who didn’t grow up with this stuff.
I’m the author of this article and also à daily reader of osnews. I’m quite thrilled to be liked here!
And quite glad you liked the post 😉
That really brings back memory of attempts to free just a little bit more DOS memory, so you’d be able to run your favourite game
I remember when I discovered that microsoft memory manager was not the only solution. QEMM https://en.wikipedia.org/wiki/QEMM was wonderful. At the time, it blew my mind. How come a company, whose OS was mandatory sold with all PCs (and thus crushing all opponents), was not even trying to do it correctly. I then realized that alternative are often better. I was a teenager back then, I now work as a FOSS Engineer. Thank you Microsoft, thank you Quarterdeck!
Windows 2 (except, I assume, the 386 variant) and Windows 3.0 (if running in real mode) also needed some tweaking of memory configuration to get more than one big program running at the same time. If all such programs were written to identical standards, the usual procedure for daily use was simply to try loading in order of size, from biggest to smallest.
Excel 2.1 and Word for Windows 1.0 were written to different EMS standards, however – 3.2 and 4.0 respectively. 3.2 needed one contiguous 64KiB page frame, whereas 4.0 was more tolerant, and would happily use 4x 16KiB page frames. Loading Word first (because it was bigger) ran the risk of Windows allocating 4 separate page frames, which Excel would not be able to use. I would therefore have to load Excel first, to ensure Windows allocated a single non-fragmented page frame.
I was *so* happy when Microsoft released a recompiled version of Excel, and I could simply use the protected memory modes of Windows 3.0.
edit: corrected terminology page window to page frame
Edited 2018-06-11 12:19 UTC
Strange comparing an Amiga 500 from the 80s to early 90s PCs, probably “cutting edge” upgraded. The Amiga 500 was an entry level home computer. The Amiga 2000 was the more easily and extensively upgradeable “workstation” option. Also the Amiga 3000 released in 1990 was considered to the best overall computer of its time.
There was far more and better multimedia software available for the Amiga 500 and handy utilities on Aminet during the early 90s. Not until after the release of Doom was the average PC upgraded enough to rival the Amiga 500 at games, but on the Amiga it was still easier to plug in two joysticks or even mice (i.e. 2-player Lemmings or Settlers).
He was comparing the memory model of 68k vs. x86. The memory segmentation, not the market segmentation.
The point of this comparison is precisely to tell that despite being theoretically far more powerful than an Amiga 500, PC in the 90s where crippled by all the legacy baggage.
I totally agree with you when you say that an Amiga 500 is a wonderful home computer. The point of this post was not to say otherwise. On the contrary, I show the silliness of memory management under MS-DOS (while trying to tell the rationals behind).
Believe me: I was extremely frustrated when I tried to launch a game on my 16MB machine and the result was : “At least 570KB of memory is required.”
(I’m the author of the blog post discussed)
And there were lots of 8086-based PCs still being sold in the early 90s, and indeed new models released (e.g. the Amstrad PC3086 in 1990). Most PCs being sold in the very early 90s were still 16-bit; 386 PCs still cost thousands of pounds then. It wasn’t until about 1993 or 94 that the PC overtook the Amiga.
Thanks to MCGA, adlib, soundblaster (even early versions) to play Commander Keen, Leisure Suit Larry, Wolfenstein 3D, Stunt Island, X-Wings, Loom, Indiana Jones, Doom, Ultima Underworld, …
I remember the first graphic cards on VLB, much much better than ISA, before PCI. Added 640×480 in 256, 64k then 16m colors. Matrox cards doing genlock and PiP with real-time effects.
Used 486dx2 (66Mhz with 4MB) then 486dx4 (100Mhz with 16MB) in 1993 that would put to shame my Atari Falcon030 (16Mhz with 14MB), with its DSP or not. I then understood that 68k was doomed.
That is exactly what I remember as well, if my memory serves me correct. It was between 92 and 94 that both PC’s and Amiga’s were kind of equal. Not in any way equal to the point of being the same. It was more of a kind of Amiga’s being the best at something and the last half of things were the PC’s area.
Games were more or less equally good looking as an example. I remember the first games, that were better on the pc. Syndicate is one fine example. I think it was the first game ever, were the PC version was better. Pinball fantasies, dreams and illusions were still better on the Amiga. Despite 16bit sound became standard around late 92 to early 93.
It was not untill Os/2 that the PC got a real operating system. Then followed an inferrior Win95 OSR-1. It was first with Windows2000 that you could finally say that the pc has beaten the Amiga. And yet the idea of a ram-disk in the way the Amiga had it. Was not introduced to the PC world untill somewere around 2016/2017.
Edited 2018-06-13 21:58 UTC
Maybe among those who haven’t heard of Next machines?
Nothing beats switching 64KB code and data segments back and forth from EMS.
… Grrrr.
I don’t miss it. Not for a second.
– Gilboa
Thankfully, I’m a little too young to have experienced that… though it was also partly that BASIC was all I had learning materials for, so my father’s Microsoft C/C++ 7.0 and Windows 3.1 SDK floppies and reference manuals were cool but effectively useless toys and what I pined for was QuickBasic 4.5’s compiler.
Of course, now, I have even less patience for antiquated tools when the utilities I want to write for my retro-PC are just a means to an end, so I’m glad Free Pascal can target DOS (and Win16 in trunk) and OpenWatcom still has its Win386 “DPMI extender for Win16” and effortless support for cross-compilation.
A couple of months ago, I actually looked at some code I write in the mid 90’s. I was amazed how simple and effective it was.
… Man I’m old
It was hell. Everything about the early PC was hell. I guess the passage of time of made people inquisitive about it. Maybe it’s even grown a little “cooler”.
It was CRAP! Fiddling jumpers on sound cards so they didn’t conflict with the VSYNC signal of some ancient video card. Busses so slow that you couldn’t even clear the display. CPU registers that have different timing characteristics. Every memory location aliased 4096 times in a segment model that nobody could love (I never quite understood the point of it TBH).
Everything started with writing your drivers for video, audio, mouse, keyboard. The BIOS was garbage and couldn’t push the serial or parallel IO at any decent speed (code your own and it’ll go as fast as the hardware).
AND it was expensive!
Then, just to make it more fun, they added paging. Everything was a hack and a kludge.
I can’t believe it beat good clean 68K machines with good frame buffer and a fast bus… but that failure is another story.
I still have near, far, huge pointers and all their variants burnt into my memory!
Never underestimate the power of making it easy for an ecosystem of clones to be built using off-the-shelf components.
It worked for the IBM PC and it worked for Android.
True, but I don’t think IBM meant to do it! I’m pretty sure they didn’t mean to do it.
Pretty certain Google did.
… But on the up side, it forced programmers to write *efficient* code.
I still find it amazing that many C++ programmers don’t really comprehend the difference between passing structures by pointer and passing them by value (effectively making a copy of it), simply because the hardware is so damn powerful, they don’t feel the difference.
Back in the DOS days, you have to use clever tricks simply to avoid using the dog-slow imul multiplication command.
– Gilboa
Edited 2018-06-13 10:09 UTC
If they are C++ programers, I hope they consider passing it by reference. 😉
Grrrr…. I shoot people for less. (And got off my lawn!)
Perhaps that passing by pointer is faster, provided you have a synchronous treatment of the said structure. In a multithreaded environment, you better make a copy of it (message passing?) to ensure its lifetime validity.
Trust me, it wasn’t a conscious decision, they simply didn’t understand the difference.
In once case I actually had to benchmark their code, fix the code, and benchmark the code again to drive the point home…
– Gilboa
Which is why I find Windows 95 a truly fascinating OS: A window to the future built on DOS. Depending on your use case, it either behaved much like Windows XP without true memory protection (if all your software and hardware was new) or a GUI for DOS (if your hardware and software was old and you had to configure TSRs and mess with IRQs).
Fortunately I belonged to the first group and missed all the “fun”.
Edited 2018-06-11 21:44 UTC
It’s a little more nuanced… http://www.osnews.com/permalink?657335
And even Windows 3 was really no longer “built on DOS” http://www.osnews.com/thread?654153 …so not to mention 95.
The PC beating the Amiga in the early 90’s? I am sorry to say, that the PC did not beat the Amiga untill somewere around 1994. And even then, the Amiga would still beat the pc in some areas.
If we are talking early pc technology before local bus’s, then yes, the Amiga would beat the PC in nearly all area’s. If we are dealing with a strong early PC with local bus or even PCI, then the PC began to beat the Amiga.
Right now, I am putting together a 486dx33 machine, that the Amiga would beat in nearly all fields.
https://www.vogons.org/viewtopic.php?f=25&t=60647
Regarding memory management, then it was not untill MS-Dos 6.2x that it all began to get easier. Memmaker was a godsent little program that MS released with those last versions of real MS-Dos. And it helped that menuitem was a feature as well. Running MS-Dos 5 and down was a nightmare. Some game devellopers released tools on their games, that would allow you to create a bootdisk, in order to gain as much base mem as possible. Eighter way. That period, were Amiga’s and PC’s overlapped each other in what was the best platform. That period was the absolute best in computing history. It was a really exciting and special time period from 1990 to 1994.
Edited 2018-06-11 22:54 UTC
It depends on the game. For 2D action one, I agree with you. But 3D games were far slower on an Amiga (I played F29 and Epic on both machines) due to the more powerful CPU of the PCs in the early 90s.
Adventure games were also better on a PC. 256 colors and no insane floppy swapping (if you had a stock Amiga).
Amiga hardware was more adapted to fast 2D gaming, but yes I persist: in the early 90s, PCs were more powerful than an Amiga 500 in every other area of computing.
An of course, the absence of a chunky mode made the Amiga line irrelevant for FPS in mid-90s.
I started on 8088 learning IBM DOS and getting stuff for MS DOS to run on it was generally painless except for some rare exceptions. MS DOS was basically gifted to me when I had a 286. Same thing with my first 386SX, got Windows FWG 3.11 for free. The only other client I was learning was Netware, which was strictly for a server. My personal stuff was always on MS stuff because vendors gifted me free copies at every turn. Piracy and free copies propelled the MS domination.