liam_on_linux: (Default)
[personal profile] liam_on_linux
From a Reddit post

     A very brief rundown:

  1. If you are using Microsoft tools, you need to load the 386 memory manager, emm386.exe, in your CONFIG.SYS file.

  2. But, to do that, you need to load the XMS manager, HIMEM.SYS, first.

  3. So your CONFIG.SYS should begin with the lines:

DEVICE=C:\WINDOWS\HIMEM.SYS
DEVICE=C:\WINDOWS\EMM386.EXE
DOS=HIGH,UMB

4. That's the easy bit. Now you have to find free Upper Memory Blocks to tell EMM386 to use.

5. Do a clean boot with F5 or F8 -- telling it not to process CONFIG.SYS or run AUTOEXEC.BAT. Alternatively boot from a DOS floppy that doesn't have them.

6. Run the Microsoft Diagnostics, MSD.EXE, or a similar tool such as Quartdeck Manifest. Look at the memory usage between 640kB and 1MB. Note, the numbers are in hexadecimal.

7. Look for unused blocks that are not ROM or I/O. Write down the address ranges.

8. An example: if you do not use monochrome VGA you can use the mono VGA memory area: 0xB000-0xB7FF.

9. One by one, tell EMM386 to use these. First choose if you want EMS (Expanded Memory Services) or not. It is useful for DOS apps, but not for Windows apps.

10. If you do, you need to tell it:

DEVICE=C:\WINDOWS\EMM386.EXE RAM

And set aside 64kB for a page frame, for example by putting this on the end of the line:

FRAME=E0000

Or, tell it not to use one:

FRAME=none

11. Or disable EMS:

DEVICE=C:\WINDOWS\EMM386.EXE NOEMS

12. Important Add these parameters one at a time, and reboot and test, every single time, without exception.

13. Once you told it which you want now you need to tell it the RAM blocks to use, e.g.

DEVICE=C:\WINDOWS\EMM386.EXE RAM FRAME=none I=B000-B7FF

Again, reboot every time to check. Any single letter wrong can stop the PC booting. Lots of testing is vital. Every time, run MSD and look at what is in use or is not in use. Make lots of notes, on paper.

14. If you find EMM386 is trying to use a block that it mustn't you can eXclude it:

DEVICE=C:\WINDOWS\EMM386.EXE RAM X=B000-B7FF

The more blocks you can add, the better.

15. After this -- a few hours' work -- now you can try to populate your new UMBs.

16. Device drivers: do this by prefixing lines in CONFIG.SYS with DEVICEHIGH instead of DEVICE.

Change:

DEVICE=C:\DOS\ANSI.SYS

To:

DEVICEHIGH=C:\DOS\ANSI.SYS

17. Try every driver, one by one, rebooting every time.

18. Now move on to loadable Terminate and Stay Resident (TSR) programs. Prefix lines that run a program in AUTOEXEC.BAT with LH, which is short for LOADHIGH.

Replace:

MOUSE

With:

LH MOUSE

Use MSD and the MEM command -- MEM /c /p -- to identify all your TSRs, note their sizes, and load them all high.

This is a day or two's work for a novice. I could do it in only an hour or two and typically get 625kB or more base memory free, and I made good money from this hard-won skill.   


Date: 2025-03-03 12:54 pm (UTC)
lovingboth: (Default)
From: [personal profile] lovingboth

If you're recommending Manifest, why didn't you mention QEMM386?

Date: 2025-03-04 12:05 pm (UTC)
lovingboth: (Default)
From: [personal profile] lovingboth

Gosh. I remember Borland's Sprint word processor needing a patch on 486 machines, because a timing loop finished in zero ticks of the 18.2 Hz clock on them. (Still my favourite wp program, all the books done on it.)

Perhaps this is why QEMM386's licences were only valid for a few (ten?) years - they knew it'd fail when processors got too fast for a race condition somewhere.

Date: 2025-03-05 04:27 pm (UTC)
lovingboth: (Default)
From: [personal profile] lovingboth

Yep, DOSBox (and -X) are faking it. Makes life a lot easier.

Date: 2025-03-04 09:21 am (UTC)
andrewducker: (Default)
From: [personal profile] andrewducker
I am so glad I don't have to worry about that kind of thing any more!

Date: 2025-03-04 07:41 pm (UTC)
lovingboth: (Default)
From: [personal profile] lovingboth

Checking, the default setup for DOSBox-X gives you

C:\>mem

Memory Type         Total      Used       Free
----------------  --------   --------   --------
Conventional          640K        32K       608K
Upper                  80K         0K        80K
Reserved              304K       304K         0K
Extended (XMS)     15,360K       448K    14,912K
----------------  --------   --------   --------
Total memory       16,384K       784K    15,600K

Total under 1 MB      720K        32K       688K

Total Expanded (EMS)                   15M (15,269,888 bytes)
Free Expanded (EMS)                    15M (15,269,888 bytes)

Largest executable program size       608K (622,272 bytes)
Largest free upper memory block        80K ( 81,920 bytes)
MS-DOS is resident in the high memory area.

I have to use loadfix to get some things to run, because they're surprised at being so low in memory...

May 2025

S M T W T F S
    12 3
45678910
11121314151617
1819 2021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 7th, 2025 05:58 pm
Powered by Dreamwidth Studios