VOGONS


EXMS86 (XMS for your 8086)

Topic actions

Reply 20 of 23, by mateusz.viste

User metadata
Rank Member
Rank
Member
MobyGamer wrote on 2025-07-18, 20:08:

I think you are making the mistake that software written 30+ years ago should somehow adhere to current homebrew/enthusiast standards.

I think you are making the mistake that I am concerned only about 30+ years software. :)

A perfect example of what I was referring to is FreeCOM: it works on a 8086, but hardly usable without its xms-swapping feature. When executed on a 8086 it still probes for XMS and is able to use it. A similar situation to DOSMid, in a sense. Surely there's a lot more such software out there.

The sad part is that FreeCOM does not work with EXMS86, at least not on my virtual setup. FreeCOM asks for XMS transfers that are 30-50K big, and these fail to be performed correctly by the bocaram EMS driver I use. The maximum I can do without data corruption seems to be around 9K. Weird, since the EMS spec promises transfers of up to 1MB... Perhaps it's a virtualization glitch, or maybe I am missing something. Oh well, I should really look around for a real ISA card.

http://mateusz.fr

Reply 21 of 23, by mateusz.viste

User metadata
Rank Member
Rank
Member
mateusz.viste wrote on 2025-07-18, 20:44:

The sad part is that FreeCOM does not work with EXMS86, at least not on my virtual setup.

I realized that I could test EXMS86 without emulating an EMS card through 86box - disabling XMS (but keeping EMS enabled) in DOSBox works just as well, and is much faster.

With this streamlined setup, the FreeCOM issue no longer appears, everything runs flawlessly. It’s beginning to look like my previous problem may have stemmed from some stupid virtualization glitch.

I released EXMS86 v0.9.1 today.

http://mateusz.fr/exms86/

http://mateusz.fr

Reply 22 of 23, by MobyGamer

User metadata
Rank Member
Rank
Member
mateusz.viste wrote on 2025-07-18, 20:44:

The maximum I can do without data corruption seems to be around 9K. Weird, since the EMS spec promises transfers of up to 1MB... Perhaps it's a virtualization glitch, or maybe I am missing something. Oh well, I should really look around for a real ISA card.

The 1MB transfer limit comment applies only to conventional-to-conventional moves; the most that can be moved in ems-to-conventional is limited to a 16K page. That said, you shouldn't be seeing errors transferring more than 9K; what is the AH result code after a failed Function 24 copy?

I wouldn't be quick to blame "a virtualization glitch". dosbox does a lot behind the scenes to "fix" bugs in software to get that software to run.

Reply 23 of 23, by mateusz.viste

User metadata
Rank Member
Rank
Member
MobyGamer wrote on Yesterday, 20:28:

The 1MB transfer limit comment applies only to conventional-to-conventional moves; the most that can be moved in ems-to-conventional is limited to a 16K page.

Could you please provide the source of your information? What I read in the EMS 4.0 spec is this:

"Using Function 24 (Move/Exchange Memory Region), you can easily move
and exchange data between conventional and expanded memory. Function
24 can manipulate up to one megabyte of data with one function call."

and then, later in the longer description of Fn 24:

"A region length which exceeds 16K bytes is not an error. In this case the function assumes that a group of logical pages is the target for the move. The logical page specified represents the first logical page in which the move will take place. If the region length exceeds 16K bytes, or if the region is less than 16K bytes but spans logical pages, there must be sufficient logical pages remaining after the first logical page for the entire region to fit."

MobyGamer wrote on Yesterday, 20:28:

That said, you shouldn't be seeing errors transferring more than 9K; what is the AH result code after a failed Function 24 copy?

Zero.

MobyGamer wrote on Yesterday, 20:28:

I wouldn't be quick to blame "a virtualization glitch". dosbox does a lot behind the scenes to "fix" bugs in software to get that software to run.

Of course, no virtualization is perfect. Sometimes it breaks things that should work, sometimes it fixes things that should break. But until I have real hardware to check or a bug report from a hardware owner, I'll go the easy route and assume I'm good.

http://mateusz.fr