Micheal Devore wrote: Uploaded to ftp://ftp.devoresoftware.com/downloads are emm386.zip (uncompressed executable) and emm386sr.zip (source) with several changes related to UMBs, EMS, and rebooting. The ZIP files are dated April 26, 2004, actual files dated April 25. EMM386 performs a warm boot upon a Ctrl-Alt-Del keypress. It changes the EMS driver identifier to EMMQXXX0 when the NOEMS parmeter is specified. It uses a 4K minimum upper memory block size, and it allows two optional parameters, X=TEST and I=TEST to better control UMB's. These changes to EMM386 were all feedback driven, so please note that your problem reports are important and can directly affect EMM386 behavior. Detailed discussion of the changes and associated philosophies follows: The keyboard handling code within EMM386 which detects Ctrl-Alt-Del keypresses now writes the value 1234h to BIOS data area 40:72h, to explicitly enable a warm boot, rather than rebooting based upon whatever value happened to be at that address. The original EMM386's explicit output to port commands to force a boot were removed and reboots are vectored through real mode BIOS address FFFF:0. The NOEMS parameter of EMM386 changes the EMS driver identifier to EMMQXXX0 to match the change to device driver name that was already made by EMM386 with NOEMS. This change allows TDSK and Turbo Debugger to run in a NOEMS condition since they attempt to use EMS after detecting a valid EMS identifier, and then failed because NOEMS did not support EMS functions they used. UMB's are now 4K-based instead of 16K-based, by popular demand. Besides direct request, another reason for the change is that the latest beta UMBPCI utility supports 4K UMB's and we need to keep the maximum number of people using EMM386 for best stability, rather than lose out to a more UMB-efficient free utility. This change means that smaller holes in the upper memory area can be used for UMB's. At /VERBOSE startup, the listing of UMB's is listed by 4K units and consequently you'll see a lot longer listing, but contiguous UMB's continue to be merged into one large UMB at the end. As a side consequence, the FC00 upper memory mapping change for reboots was changed to FF00 mapping. This 4K change probably wasn't all that critical, but the code involved wasn't that difficult to modify and everybody who commented wanted it, so I went ahead and did it. Finally, I added two new options which don't follow Microsoft standard. Why the heck did I do that so close to FreeDOS 1.0 release? And why do it now when there are still EMM386 options unsupported which are Microsoft standard? Simple reason: the options (well one of them) help eliminate known and reported compatibility problems with UMB's that an average user might find difficult to fix on his or her own. As the mantra goes, "any change which reduces problem reports is a good change." I tried to make them logically follow existing option behavior. The first option is X=TEST. This option tests all UMB blocks after X= and I= qualification by examining all bytes of the ROM block memory image. X=TEST will discard a block from being used as a UMB if it detects any byte value other than 0 or 0FFh, since those two values typically are found in unused upper memory. Is X=TEST really necessary? Unfortunately yes, at least for some machines. There exist PC's which place ROM code in the upper memory area, but without the standard ROM signature of 55h AAh. These aren't old moldy machines either. In a small test pool, at least two Pentium 4 class machines placed disk driver code in upper memory areas without using ROM signatures. Overwriting the ROM code obviously could cause serious problems and the standard EMM386 ROM-scanning method has no way to detect that code. X=TEST will detect the code and stop a UMB from being placed there. The paranoid may want to make it a default option. For symmetry, and because Bernd Blaauw really wanted it (plus he promised to slip me ten pre-euro guilders which sounded like a lot of money until I looked up old currency conversion charts), there is also an I=TEST option. This option is almost the opposite of X=TEST. It goes through all ROM images that EMM386 scans and, if there is a 4K image in the ROM which is all 0's or FFh values on a 4K boundary, I=TEST will re-include that area into a UMB. Obviously this can be dangerous if a ROM uses the 4K area of 0 or FFh values for its own purposes, so I=TEST is only recommended for risk-takers trying to squeeze out maximum UMB space. X=TEST and I=TEST can be used together, along with all other parameters including X= and I=. Remember, X is exclusionary, so X=TEST will never give you more UMB's, only the same number or less. I is inclusionary, so I=TEST will never give you fewer UMB's, only the same or more. As auto-tests, they are both overridden by I= and X= options. Therefore, UMB's are computed by this option priority: X= (explicit exclusion of an upper memory area overrides the world) I= (explicit exclusion overrides everything except where it conflicts with an X=) X=TEST I=TEST If you decide to try X=TEST or I=TEST, please let me know if you lose or fail to gain expected UMB's so I can see whether there are additional byte patterns in your machine's upper memory I should test for. Already X=TEST has been modified to not check the last byte of a 4K block because there are ROM's (like mine) which stick a garbage byte value on the end. Also, let me know if the changeover from 16K- to 4K-based UMB's causes any problems. It works okay in limited testing with a few users. There is at least one user out there who continues to have problems with recent versions of EMM386, so if you have problems with EMM386 on any machine please let me know. The more data I have, the more likely a fix or work-around will be forthcoming. And I lied about the guilders.