A new test version of VCPI-enabled EMM386 has been uploaded to ftp://ftp.devoresoftware.com/downloads in the files EMM386.ZIP and EMMSRC.ZIP, available via anonymous ftp. File EMM386.ZIP has the uncompressed EMM38664.EXE, EMMSRC.ZIP has EMM386C.C and EMM38664.ASM source files.
This version corrects several errors with the NOEMS parameter of EMM386, which was broken about four different ways, including failure to create UMB's. In addition, DOS/4GW now works with the NOEMS setting. It is smart enough to allocate from XMS after all, just a bit picky about how. The NIOS Netware subsystem will now load if you use NOEMS, or if you keep your EMM= parameter to a low value. Apparently NIOS is load sensitive and if it allocates XMS memory close to or beyond the 4M boundary, it will crash and typically reboot the machine. Larger EMS values push XMS allocations out to the danger point. On my machine, an EMM= value of 2566 will work with NIOS and 2567 will crash it, so a little over 2M of EMS is best you can do with it. The exact failing value will vary from machine to machine. Remember that EMM386 by default without the NOEMS setting creates 32M of EMS, a value which will definitely smoke NIOS. Additional technical details follow: EMM386 now renames the EMM device driver to EMMQXXX0 from EMMXXXX0 if the NOEMS parameter is specified, following the behavior of Microsoft's later versions of EMM386. Programs which detect an EMS manager by checking the device name will therefore fail and not attempt to use EMS. Setting the NOEMS parameter does not zero out the INT 67h vector unless the NOVCPI parameter is also specified. The above change brings up an interesting conflict with NOEMS: programs such as Turbo Debugger 2.5 will fail with a 'fatal EMS error' if the NOEMS parameter is used because TD appears to only check for a nonzero INT 67h vector for EMM presence and, finding it, will attempt to use EMS functions that all return a 'function not supported' error. However, NIOS will completely refuse to load and say VCPI is not available if you do zero out the INT 67h vector. How delightful. If you for some reason want to use both in the same DOS session, and still don't want a lot of EMS on your machine, I'd recommend using a value of EMM=1 rather than NOEMS. That makes both of them happy. You can also specify NOVCPI with NOEMS and make almost nothing that uses protected mode work, including DOS extenders and NIOS. But Turbo Debugger will still love you and you'll still have your UMB's. I modified the LGDT and LIDT instructions in one of the VCPI routines where they seemed to be using the 16-bit version rather than the 32-bit version. Maybe this will clear up lingering problems with DOS extenders that others are having. The VCPI function to get 8259A vector mappings was giving the wrong value for the slave 8259A and has been corrected. The protected CPU instruction mov eax,cr3 is now emulated in the exception handler of EMM386, so it works under V86 mode rather than terminating with an error, required for at least one program out there which does that sort of thing. If you would, please put this version of EMM386 through suitable tests, particularly with protected mode/DOS extender stuff, and let me know the results. ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ Freedos-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freedos-devel