Quantcast
Channel: Active questions tagged memory - Retrocomputing Stack Exchange
Viewing all articles
Browse latest Browse all 47

Why did programmers keep using EMS when XMS became commonly available?

$
0
0

I used to spend hours trying to get all of my drivers loaded in such a way that DOS games would still run. I actually managed to get a game that claimed it could not be run with DoubleSpace because of the amount of conventional memory it caused to run anyway. I knew people who made a different boot disk for each of their games. It was a real thing.

This is what I remember the most about it:

  • To use memory past the first 1 MB, I needed to load HIMEM.SYS in CONFIG.SYS. It opened up the memory above the 1 MB mark as extended memory (XMS). That's all that was needed. Cool. HIMEM.SYS used precious conventional memory but it was worth it.
  • To use expanded memory (EMS), I needed to load EMM386.EXE. (I didn't know about the hardware devices that provided EMS.) But only memory that had already been opened up as extended memory could be used to make expanded memory. The problem with that was that EMM386 also used conventional memory.
  • Of course, in order to use the mysterious upper memory, one could use the LOADHIGH or LH command. This worked very well for things like the mouse and keyboard drivers if you didn't use a US keyboard. But upper memory was only unlocked by EMM386. You could specify the option NOEMS to EMM386 if you only wanted upper memory and no actual expanded memory. Usually, the amount of memory that was opened up made it worth it.
  • Some games only wanted XMS. Some games only wanted EMS.

I assumed that EMS was some sort of improvement over XMS, because the XMS driver was needed to load EMS. Now, I know better. EMM386emulated a physical EMS device, and EMS was actually an older technology.

But, even in the 90s once XMS had become very common, I remember some games wanting one and some games wanting the other. And even then, I thought, "Given that the extra memory is already unlocked by HIMEM.SYS, why are they requiring EMS? In what way is it better? Is it easier to use? I now have a better idea of how juggling memory was tricky in DOS, to say the least. But I still don't know why developers would keep using EMS when XMS seemed so much easier to deal with.

I know that EMS was broken down into "pages." In French (my first language), it was called "mémoire paginée" or paginated memory. So the page part seemed to be important. But why and how?

Does anyone know why, with he option to use only one memory driver, HIMEM.SYS, game developers required people to also load a second one, regardless of whether or not they needed upper memory? I still can't figure it out.


Viewing all articles
Browse latest Browse all 47

Latest Images

Trending Articles



Latest Images