HISTORY.TXT

************* version 2.26 -- 25 aug 2006 *************************

Fixed a problem with NOALTBOOT code so that rebooting via certain
means was no longer problematic.

UPX compressed HIMEM and EMM386 executable with --8086 option.

Added "Required 80386+ CPU" text to help screen for HIMEM and EMM386.


************* version 2.25 -- 19 aug 2006 *************************

Reworked order of A20 testing and added patch for buggy BIOS's 
in HIMEM for better universal compatibility.

Make EMM386 NOALTBOOT the default option for better virtual environment
and GEOS compatibility.

Added NODISABLEA20 option in EMM386.

Ensured CR3 update on PTE scratch tables for MMIO in EMM386.

************* version 2.23 -- 10 aug 2006 *************************

Corrected problem with gigabyte 'G' suffix on command line parameters

Reworked stack management in VCPI handler for improved DOS extender
compatibility.

Reworked A20 enable/disable routines for better match to specification.

Change INT15 handler to conserve additional status flags.

Added experimental build system.

************* version 2.21 -- 30 jul 2006 *************************

Fixed bug in EMS function 53h, subfunction 1.

With option EMM=, the EMS used page report was double-counted.

The 386-CPU or better check at startup was corrected.

The VCPI allocator could under certain conditions (typically low memory)
report out of memory even while free memory existed.

Changed INT 13h, INT 40h, and VDS interrupt processing routines to return
original entry flags with carry flag updated only.

************* version 2.20 -- 27 jul 2006 *************************

Fixed bugs in EMS function 54h subfunction 0 and subfunction 1.

Clear real mode interrupt flag on INT processing code in EMM386 to allow
Qemu to work with CTMOUSE.  Untested.

Supported global and local A20 disable/enable functions with EMM386
to allow ancient EXEPACK'ed programs to work properly without LOADFIX.

Cleared up a XMS free block fragmentation issue which could sometimes
occur with EMS- and VCPI-using programs.

XMS 3.0 API function 88h would report ending address one byte too high,
and potentially otherwise wrong if installed memory was not a
multiple of 64M.

************* version 2.11 -- 15 jul 2006 *************************

Fixed register-altering bug in some VDS functions.


************* version 2.10 -- 08 jul 2006 *************************

Increased default XMS memory reserved from VCPI/EMS allocations at
startup.

Improved EMS/VCPI memory allocator when initial user-specified amount
was too large.

Slight modifications to VDS return codes and behavior in functions 0bh
and 0ch for better application compatibility.

Corrected error where EMS pages reported as available did not track
existing VCPI allocations as part of the total.

Corrected error where high extended memory (at least 256M) in VCPI
programs which made protected mode memory allocation calls back into
EMM386 were not properly mapped into EMM386's memory space.

XMS 3.0 API function 88h correctly returns the highest ending address in ECX.

HIMEM's /X2MAX32 option is the default.  A new /NOX2MAX32 option will
inhibit /X2MAX32's behavior.

Updated copyright messages.


************* version 2.08 -- 28 sep 2005 *************************

Added support for the MIN= option mimicking existing EMM= option to
match Microsoft EMM386 option.  MIN= acts exactly like the EMM=
option; it was added strictly for enhanced MS compatibility.

Added support for the "no-op" options NOHI and NOMOVEXBDA to match
Microsoft EMM386 options.  No behavior change occurs with these
options, they are strictly for enhanced MS compatibility.

Minor cosmetic source code changes and cleanup made to EMM386 for
better NASM translation compatibility.

************* version 2.07 -- 08 sep 2005 *************************

Fixed error in EMM386 which caused crashes when attempting to
release an upper memory block.

Implemented a strictly optional change to HIMEM to use BCD for
an internal versioning call.

Very minor changes to HIMEM source code for smaller binary code
when using NASM-converted source.

************* version 2.06 -- 23 sep 2005 *************************

Fixed error parsing NOVDS such that it did not properly activate.

Fixed error patching out EMM386 driver entry after initialization,
causing problems with programs which queried the EMS driver,
such as PKUNZIP, unless NOEMS was specified.

Added VDS function filtering to attempt better compatibility with
SCSI drive conflicts.  All VDS reserved but unused functions now
pass through the VDS interrupt without an error return code.

Allow I= inclusion of upper memory in the ranges F000-F7FF.

Lowered EMM386 default MAX setting to 120M to avoid problems with
some of Borland's programs which fail with 127M or more of free VCPI.

Reduced common VCPI client/server GDT mapping in first 4M from 2M to
1.75M to give more room for applications requiring memory there.


************* version 2.05 -- 19 sep 2005 *************************

Fixed HMAMIN to set internal value as bytes, not kilobytes and
changed limit to 63K from 64K.

Fixed error in VDS scatter/gather function.

Fixed error with NOVCPI conflicting with UMBs

Fixed EMS page frame error where it was set without a contiguous
64K upper memory block.

HIMEM XMS API can now grow an XMS block on resize if sufficient
memory exists.

EMM386 driver preserves all used 32-bit general and segment
registers for better compatibility.

VDS on is now the default, use the new NOVDS option to turn VDS off
for incompatible SCSI systems.

EMM386 defaults the MAX setting to 256M to avoid DOS/32A
unhappiness with too much free VCPI memory available.

Memory checks for memory-mapped I/O (MMIO) are on by default for
ranges 3G-4G.  The MEMCHECK option continues to support the full
0-4G address space.  A new NOCHECK option turns off all checks for
memory access outside of physical RAM.


************* version 2.04 -- 07 jul 2005 *************************

Fixed bug with /NUMHANDLES option in HIMEM

Fixed bug in EMS function 51h when shrinking page allocation.

Fixed bug with rounding of control allocations for EMS pages under
low values using fixed amount EMM= option.

Add small sanity checks to EMS page allocate/release to avoid hard
crashes when bad things happen.

Save high word of EAX value during servicing of VCPI function DE01,
Get Protected Mode Interface.  Fixes no known problems.


************* version 2.03 -- 08 jun 2005 *************************

Saved high word of EAX value during servicing of VCPI function DE04,
allocate 4K page, to eliminate problems with WDOSX DOS extender.

Added IRETD after HLT instruction emulated in EMM as a safety net.


************* version 2.02 -- 15 may 2005 *************************

MAX=##### option in EMM386 to limit available VCPI, and EMS if <32M.


Minor bugfix on XMS -> VCPI/EMS pool allocation which could cause
temporary loss of 0-2% of memory allocated as unavailable.

Bugfix for situation where very small (<4K) free XMS blocks exist
and the block alignment was odd could lead EMS/VCPI allocator to
believe it was out of memory and fail further allocations.

Emulation support for RDTSC for early Pentium and AMD chips which
improperly treat the instruction as protected in V86 mode.

Give warning message for using old/out-dated HIMEM and other XMS
memory manager which don't support INT 2Fh function 4309h, forcing
use of EMM= option to reserve memory for EMS/VCPI.


************* version 2.01 -- 2 may 2005 *************************

Fixed fatal automatic pool-sharing errors that affected many users.

WRMSR instruction supported via emulation.

DOS redirection support added to HIMEM/EMM386 output.

Trivial cosmetic changes.


************* version 2.0 -- 28 apr 2005 *************************

EMM386 supports automatic pool-sharing between EMS, XMS, and VCPI memory.

/X2MAX32 option for HIMEM.

/? option supported as a no-op.

Fix for INT 15, function 87h in EMM386.

EMS unmap page bugfix.

************* version 1.5 -- 20 feb 2005 *************************

VDS function 2 support

Various uncommonly-used EMS 4.0 function and subfunction additions.

Fix EMS 4.0 function 53h and 58h bugs.

Additional reworking of VCPI code.

Miscellaneous cosmetic changes to source code.

************* version 1.4 -- 7 feb 2005 *************************

EMS 4.0 function 53h support.

INT 15h, function 87h, check out of range off by one byte fix

NOEMS with EMM= option fix.

INVD instruction emulation

Internal reworking for better overall VCPI program compatibility.


************* version 1.13d -- 4 jan 2005 *************************

HIMEM fix for HMAMIN option.

Support for INT 15h function 4309h as prep for future EMS/XMS pool sharing.

EMM386 FRAME=NONE parsing fix.

2005 copyright updates.

************* version 1.13c -- 12 dec 2004 *************************

MEMCHECK option allows use with USB drives.

VDS fix.


************* version 1.13 -- 23 nov 2004  *************************

All moves to and from control and debug registers through standard
registers are supported by EMM386 in V86 mode.

ALTBOOT option was renamed to NOALTBOOT.  ALTBOOT is supported as the
default do-nothing-different option.

Support for EMM386's use of 'M' and 'G' suffixes on options where
the suffixes can be used.

VDS support for functions 8103h, 8104h, 8105h, and 8106h.

Expanded command line option feedback.

************* version 1.12+ -- 25 sep 2004  *************************

Unofficial 1.12+ release due to the pending 'Beta9-final' FreeDOS 
release. Please read Michael Devore's changelogs at
http://www.freedos.org/news/news/   (April04 - September04)

package modified ('created') by Bernd Blaauw, bblnews@hotmail.com


************* version 1.12 -- 27 april 2004 *************************
emm386  1.12
	taken michael devore's changes from 26 apr 2004
	changed version to 1.12, compiled+compressed.
	new options 
	   /I=TEST
	   /X=TEST

************* version 1.11 -- 09 april 2004 *************************

emm386  1.11
himem   3.11
himemsm 2.11

license changed to artistic license

emm386  supports VCPI
himem   supports >64MB memory
himemsm (old himem) supports <64MB memory, 400 byte smaller


****************   HIMEM.EXE 2.09 13 jan 04 *************************
in addition to HIMEM/EMMM386, there exist new HIMEM64/EMM38664 versions,
that support >64 MB XMS/EMS memory.
This change/addition is entirely due to Michael Devore, thanks for 
this effort.
Although the >64M versions have not been tested as extensively as the 
old <= 64M versions, they are probably stable too.


****************   EXPERIMENTAL release 25 nov 03 *************************

added new HIMEM64.exe; this is HIMEM.EXE + support for >64MB memory

current status: should work, but has NOT been seriously tested.
in particular, the extended XMS functions 88..8f are effectively
untested.

as EMM386 isn't able to handle >64M memory, code to 'kill' memory
beyond 64M was added.


****************   HIMEM.EXE 2.08 6 nov 03 *************************

if A20 was not enabled, the (successful) return code was
destroyed

****************   HIMEM.EXE 2.07 13 feb 03 *************************

now ignores, if A20 can't be disabled (outputs a small message in this case)

****************  version 0.6 26 nov 02 *************************
emm386: 
		Bernd Blaauw translated a large part of german comments in
		EMM386.ASM to english
		
		VDS made an experimental feature, no longer enabled on default
	    TIP: if you experience probles with network cards, try

	    	LH /L: NET INITIALIZE
	    	
        this forces the load into low memory of the netcard driver
		

****************  version 0.5 07 nov 02 *************************
emm386: 
		any UMB provider should provide VDS functions as well.
		now at least one function (8103 - Lock DMA region)
		is implemented, and seems to work.
		this functionality is required, if you have
		Bus master (network) cards, and the driver is loaded high.
		
		this suffices at least for my own network card ;-)
		

****************  version 0.4 7 jul 02 *************************
emm386: TOSHIBA notebooks had problems to reboot with
        Ctrl-Alt-GREY Delete. now the grey del is handled
        like the white del; seems to fix that.

****************  version 0.4 3 apr 02 *************************
himem: trying to autodetect PS/2 (even if BIOS 
	gives wrong answers)

emm386: SERIOUS bug found, that caused memory overwrite 
    problems. wonder why it ever worked at all.
    should now run much better


both EMM386+HIMEM come now compressed with a 
proprietary EXE/SYS-compressor and require ke2026 or better
(ke2025x had a minor bug when loading device drivers)
this saves 1.9K for HIMEM and 14K for EMM386 (on disk)


****************   EMM386  *************************

 12/07/01 minor bug in @@UMBfound  

EMM38603 12/04/01 published on freedos mail

EMM38602 11/28/01 
    
    some corrections to the device driver part
	enhanced memory now detected by MFT
	
EMM38601 alpha release 11/22/01 

	first public release

****************   HIMEM.EXE  *************************

 12/13/01 changed version number 0.6 -->2.06
          some software (EMU86) expects version >= 2.00

 12/06/01 bug in XMS_REALLOC_XMS found and corrected

*** version 0.6 11/23/01 ****
- renamed from FDXMS.SYS to HIMEM.EXE and made an exefile
- made it compatible with EMM386
- integrated XMSTEST (HIMEM /TEST)
- added (from FDXMS08/martin stroemberg) checking for conventional 
  memory end at FFFF:FFFF

- removed the useless *late* init code (hook_init, hook_patch,...)
  moving this code to init

- resident footprint now 464 bytes smaller then fdxms08 :-))
 


Version 0.5 - 2001.05.25 - tom ehlert <tom.ehlert@ginko.de>
- major rework:
- reported XMS version  reflects current implementation - 2.0
- reported XMS internal version reflects driver version - 0.5

- works with 64MB 
- martin stroemberg found how to do xms_move_bios for > 16MB
- xms_free_handle now actually works
- added support for protected mode operation
- many more checks for valid requests (like valid handles,valid offsets)
- major code cleaning
- has chances to work in multitasking environments (not tested)
- Change XMS_NO_UMB_AVAILABLE to XMS_NOT_IMPLEMTED in xms_request_umb.

- bugs are now by tom.ehlert (tom.ehlert@ginko.de)


- still missing:
    support for 80286 (mostly due to long arith)
    support for >64 MB memory
  



Version 0.3 - 2001.04.24 - tom ehlert <tom.ehlert@ginko.de>
- renamed to 0.3, as there where several 0.2's out :-)

Version 0.2 - 2001.04.24 - tom ehlert <tom.ehlert@ginko.de>
- seems to be stable at 31 MB (not at 63 MB!!)
  changed max XMS to 31 for real mode,
  assert for protected mode (where copy through BIOS is done)
  max XMS size = 15MB

- note: this version is most certainly buggy - its only less buggy 
  then the original - hopefully :-)


Version 0.1 - 2001.04.19 - tom ehlert <tom.ehlert@ginko.de>

- added some more validity checks
- added code, so the xms_copy_block works in protected mode,too
  this is necessary for any protected mode host - like EMM386, S-Ice,...
- as the FDXMS is definitively not stable at 60MB, artificially reduced
  max XMS size to 15 MB.
  
- added code to xms_free_block, so it frees no better 

- note: this version is most certainly buggy - its only less buggy 
  then the original - hopefully :-)


Version 0.1 - 2001.04.17 - tom ehlert <tom.ehlert@ginko.de>

- added check for valid handle in GetHandleInfo() and FreeXmsHandle()
  SHOULD BE ADDED to LockHandle(), UnlockHandle(),... NOT YET DONE
- added handle.locks = 0 in init() - clearloop

Version 0.1 - 2001.03.08 - Louis P. Santillan <lsantil@calstatela.edu>

- Updated version that includes my corrected A20 setting/resetting code
- MartinS's <ams@ludd.luth.se> fixes for incorrect reporting of the
  correct Handle Info (function 0x0E)

Version 0.1 - 10/11.95

- initial version, uploaded for testing
- still about 400 bytes bigger than HIMEM :(
- poor feedback until now...
- works with a lot of software, but Watcom Help doesn't work when run with
  Norton Cache of Norton Utilities 8.0



tom.ehlert@ginko.de
		
