VOGONS


First post, by hosso77

User metadata
Rank Newbie
Rank
Newbie

Hi all,

I'm experimenting with a custom/homemade ISA 16-bit UMB RAM card on a 286 system with a Suntac chipset.
The card can map RAM anywhere in the conventional upper memory area from C0000h to EFFFFh, although for testing purposes I am currently exposing only a single 64 KB block at D0000h-DFFFFh.
Hardware appears to be working correctly: memory tests, read/write tests, odd/even byte accesses and Windows itself can successfully store data in the region.

The interesting part is Windows 3.1 Standard Mode behavior.

If I expose D000:0000-D000:FFFF as UMBs using a DOS UMB manager (USE!UMBS, UMB_DRVR, etc.), Windows 3.1 always seems to use/overwrite that memory region.
After launching Windows and inspecting the memory area with DEBUG, I can find strings such as:

"Windows Shell Task Switcher"

inside D000 segment.

What I'm trying to achieve is the opposite: I would like DOS to be able to use the UMBs, but prevent Windows 3.1 from allocating anything there, since it is corrupting my DOS driver loaded in UMB area.

Things I have already tried:

Limiting UMBs to D000:0000-D000:FFFF only
Excluding from the card E000-EFFF (which appears to be reserved by the Suntac chipset)
Filling/allocating the entire UMB region before starting Windows
Loading TSRs (SMARTDRV, DOSKEY, etc.) into UMBs
USE!UMBS
UMB_DRVR (/C=00 ISA memory mode)
Different HIMEM.SYS options (/TESTMEM:OFF, A20CONTROL, various A20 methods, etc.)

Interesting observations:

If D000:0000-D000:FFFF is completely free (no DOS driver loaded), Windows starts and uses it.
If enough UMB space is already occupied by TSRs, Windows may fail to start (probably a conflict with DOS drivers).
Therefore it appears that Windows is actively trying to allocate memory in the UMB region rather than simply ignoring it.
MSD and MEM correctly report the D000:0000-D000:FFFF region as available UMB memory before Windows starts.

My question is:

Is there any documented way to prevent Windows 3.1 Standard Mode (286) from using DOS UMBs, while still keeping those UMBs available to DOS?

For example:

SYSTEM.INI options?
A specific memory manager?
An undocumented Windows setting?
Some way to mark a UMB region as unavailable to Windows but still usable by DOS?

Has anyone run into similar behavior on a 286 with custom UMB hardware?

Thanks in advance for any feedback!