mateusz.viste wrote on 2025-07-16, 20:14:
Sure, I could have added EMS support directly into DOSMid, but that would be so boring.
It also would have been much more performant. See below.
mateusz.viste wrote on 2025-07-16, 23:42:
Technically, I suppose exms86 could unhook umb!use, service all xms queries itself and proxify umb requests to umb!use via a direct far call. This way both xms and umb would be available, in theory. But that starts to be a little complicated and difficult to test on a virtual setup so it is not something I am eager to engage into.
If you don't feel like implementing it, then people can always use Quarterdeck's QRAM, which was designed to do all of the above (in 1990).
mateusz.viste wrote on Yesterday, 05:41:
That's a good question, and to be honest I was hoping to find out here with people saying "I can run program xyz now on my 8086!". 😜
You won't find any. XMS was not designed to be an 8086 memory standard, because EMS already existed. XMS was meant as a way for 286+ systems to make extended memory available to real-mode programs, which it does so by copying blocks of memory around. This is less efficient than simply switching pages of memory with hardware registers, which is how EMS works with real EMS hardware boards (and how EMM386/QEMM/386MAX work on 386+ systems in protected mode, using paging).
Which is why...
It appears that MS MEM doesn't even try to detect XMS on machines that are not at least a 286:
...Which is why MS MEM won't detect XMS on 8086 systems, because it was never an 8086 standard.
As for Wolf3D, the starting screen doesn't actually show the amount of available memory, but rather the amount of memory that it was able to allocate. First, it looks for EMS and allocates as much as possible (ie. everything). Then, it looks for XMS and asks the XMM driver about how much memory is available - and my driver answers "0 bytes", because there is no longer any EMS memory left that I could use to back my XMS emulation.
That is the correct behavior for a program that supports both EMS and XMS. EMS is more peformant than XMS, so you always want to try to use EMS first if both exist on the system.
If you'd like to play WOLF3D with EXMS86, then you need to instruct the game not to reserve all the EMS memory. It's actually easy: just run "WOLF3D NOEMS".
That would be slower than letting it just use EMS.