EMS and usbmass.exe problem

Post problems with getting games installed and running properly here.
Post Reply
maferv
Newbie
Newbie
Posts: 3
Joined: Fri Dec 02, 2016 8:53 pm

EMS and usbmass.exe problem

Post by maferv »

I need to load EMS (EMM386.exe) and USBMASS (proprietary usb 2.0 driver) on this harddrive-less Pentium 1 computer.

With ems, while usbmass.exe loads, when I check my usb stick dir, instead of the list of files, all I see is "IO.SYS" and nothing else.

So I guess this has to do with emm386 and how it is using some part of the memory that usbmass.exe needs, because without ems, usbmass.exe works fine.


The usbmass.exe allows one to define the start address of i/o pool and the start address of memory pool, the help page says:

/IO:n start address of I/O pool (default 0x00002000)
/M:n start address of memory pool (default 0x000D0000)

What parameters should I pass to either emm386.exe or usbmass.exe to get them both working at the same time?
User avatar
Rwolf
Gaming Demi-god
Gaming Demi-god
Posts: 1542
Joined: Fri Jan 11, 2013 3:19 pm
Location: Sweden

Post by Rwolf »

Exclude the memory range used by usbmass.exe from what emm386.exe allocates for EMS. (I think emm386 will grab all >1MB memory by default.)

You can change the included address range for emm386 using the I=low-high range, to skip past the 0xd0000-range (however much the usbmass uses).

Some emm386 parameters for dos6.2 can be found here:
http://www.vfrazee.com/ms-dos/6.22/help/emm386.exe.htm

Some other special cases here:
http://www.invisiblesoft.com/invlan/support_yesems.html
maferv
Newbie
Newbie
Posts: 3
Joined: Fri Dec 02, 2016 8:53 pm

Post by maferv »

Thanks Rwolf, I checked out those websites.

It seems the values emm386.exe accepts are 4characters-4characters (why described as m and n?) but the one we are talking about "0xd0000" isn't 4 characters. I mean, how can I "translate" this into 4 hex numbers/characters?

Should I ignore the d, or a 0, or something else?

I checked the memory that usbmass uses, and this is the output of

mem /m usbmass

Without EMS:

Code: Select all

Segment: 00ECD

Region:

Total: 95,472 (93K)
Type: Program
I found it by trial and error that with emm386.exe ram i=eeff-efff it works... this is the mem /m usbmass then:

Code: Select all

Segment: 004C8
Region:
Total:45,312(44K)
Type: Program

Segment: 0CE83
Region: 1
Total:10,752(11K)
Type: Data

Segment: 0D123
Region: 1
Total:28,320(28K)
Type: Data

Segment: 0D80D
Region: 1
Total:11,120(11K)
Type: Data

Total Size 95,504 (93K) 
Why passing that argument it works?

Perhaps with this info you can help me to nail down where exactly this program works and what is the precise i=mmmm-nnnn I should pass to emm386.exe?

Thanks.
User avatar
Rwolf
Gaming Demi-god
Gaming Demi-god
Posts: 1542
Joined: Fri Jan 11, 2013 3:19 pm
Location: Sweden

Post by Rwolf »

The usbmass.exe (from Windows 7 or later I assume?) uses a flat memory adress, while emm386 simulates segmented adressing to accomodate EMS memory access for old programs like your game. Thus the adressing in the parameter to emm386 is a 16 bit segment adress, which is used in real-mode (with an offset) by the old game program.

This difference is because the usbmass.exe is used by your more modern operating system, which can adress the full 32bit range, while the old program needing EMS to get more than 1MB memory (swapping pages as needed) uses the older real-mode under DOSbox.

There is a lot to read about this old stuff online, *if you really need to*.
just some examples below, please select depending on your level of knowledge:

http://savage.net.au/Ron/html/hex-ram-tutorial.html#EMS
http://stackoverflow.com/questions/1107 ... lat-memory
http://wiki.osdev.org/Segmentation
https://en.wikipedia.org/wiki/X86_memory_segmentation
Post Reply