
  1. About

  HimemX is a XMS memory manager. It's derived from FreeDOS Himem
  (short: FDHimem) with bugfixes, optimizations and extensions.
  To see its usage just run HIMEMX.EXE

  Projects home page: http://himemx.sourceforge.net/


  2. History

  06/05/2013, v3.34:
  - implemented new E820h memory routine for multiple 001 memory blocks
  - added 8Ah memory call for machines that support it (Phoenix BIOS)
  - corrected version numbering bug

  04/27/2008 v3.33:
  - applied Ninho's patch, forcing a near jmp $+2 after the move to cr0. This
    flushes both the instruction prefetch and predecode queues. HimemX don't
    freeze on 386 CPUs now.

  03/13/2008, v3.32:
  - the amount of extended memory restricted by /MAX does now include the
    HMA. That means, a /MAX=2048k parameter restricts Himem to exactly
    use range 0x100000-0x2FFFFF.
  - TASM compatibility abandoned (didn't work with v3.31 either). Instead
    source is now compatible with WASM v1.7j.
  - binary size reduction.

  07/23/2007, v3.31:
  - bugfix: for MS-DOS v6.22 and below, HimemX damaged parts of its code
    during initialization.
  - bugfix: after PE bit is set on a 80386/80486, there must be at least
    1 instruction before a segment register can be set. This wasn't true
    in v3.30 using unreal mode.

  04/29/2007: v3.30
  - binary size reduction

  04/19/2007, v3.29:
  - bugfix: in XMS functions 08h/88h the BH register was modified.
  - bugfix: global disable A20 does no longer disable A20 if the local
    disable counter is > 0.
  - UMBM.EXE added

  04/13/2007, v3.28:
  - bugfix: to mark unused handles FDHimem moves 01 ("free") into the flag
    field of the XMS handle and clears base address and size. HimemX
    marks unused handles by moving 04 ("unallocated") into the flag field,
    which is the - documented - MS Himem way to do it.
  - bugfix: FDHimem's "block move" implementation unconditionally enables
    interrupts if cpu is in v86-mode. HimemX never enables interrupts if
    IF is cleared on entry.
  - bugfix: the "resize EMB" function (AH=0Fh/8Fh) of FDHimem is not
    reentrant.
  - bugfix: in real-mode, FDHimem switches to protected mode and sets DS,ES
    to a flat, 4GB data selector to move to/from extended memory. After the
    move DS and ES are not reset to a "standard" segment with FFFFh limit.
    This in fact enables and keeps "unreal mode" unintentionally.
  - bugfix: for XMS local disable A20 function, FDHimem does not test an
    underflow condition of the counter (0 -> -1)
  - bugfix: HimemX checks for a 80386 cpu *before* using 32bit opcodes, so
    there is a true chance that this driver will not crash on a 80286.
  - bugfix: FDHimem's hook code for int 15h, ah=87h does not return reported
    status of carry flag to the caller.
  - bugfix: FDHimem's implementation of function 0E (get handle info) might
    have returned 0 for block size if block size was indeed exactly 64 MB.
  - bugfix: FDHimem opens an "interrupt window" in v86-mode only. HimemX opens
    an "interrupt window" in both v86- and real-mode.
  - bugfix: if no extended memory is free, FDHimem doesn't allow to allocate
    an EMB with size 0. MS Windows 9x needs this feature.
  - in FDHimem the routine which tests whether A20 is enabled is more
    complicated than necessary.
  - in FDHimem the code which switches to protected-mode and back
    sets/restores CS which is not necessary.
  - some variables which don't have to be resident were moved to the _DATA
    section, thus reducing size of the resident part.
  - HimemX is written completely in ASM, the C part has been abandoned.
  - unused code in resident part has been deactivated (proc delay2)
  - default number of handles in HimemX is 48, in FDHimem it is 72.
  - /X2MAX32 switch is off by default in HimemX, it is on in FDHimem.
  - if extended memory is >= 64 MB, the size returned by XMS V2 function
    is 65535 kB in HimemX, FDHimem returns 64448 kB.
  - generally, the source was changed from TASM IDEAL to MASM format.
    It still can be assembled by TASM, though. OW's WASM cannot be used.
  - HimemX uses "unreal" mode for moving EMBs if cpu is not in v86-mode.


  3. License

  All changes done for HimemX are Public Domain. However, since HimemX is
  derived from FD Himem, the FD Himem copyrights do apply. FD Himem is
  copyright Till Gerken and Tom Ehlert, with GPL and/or Artistic license.
