Known issues

- Note that fdxms094.zip by mistake contained the .SYSes from 0.93.Strawberries until 2005-06-04 10.20 UTC. Please redownload fdxms094.zip if you got it before that time.
- The XXMS variant "forgets" all memory it has found if INT 0x15 AX=0xe820 isn't supported.
- Allowing rubbish after arguments that don't take any values. Thus you can say PS234 or BIOSXXX instead of PS and BIOS.

Changelog of next FDXMS to be

-
- Stop the XXMS variant to "forget" all memory it has found if INT 0x15 AX=0xe820 isn't supported.
- Decreased resident size a little more by redirecting the interrupt pointer after initialising.

Changelog of FDXMS 0.94.Bananas

- After chaining INT 0x15 AH=0x87, execute a correct return.
- Functions 0xf and 0x8f (realloc) broken because BX was destroyed before used.
- Don't touch BL on a successful calls unless the specification says it should be zeroed.
- Thank you to Peter Nagy and Eric Auer for testing.

Changelog of FDXMS 0.93.Strawberries

- Changed assmebler to GNU as.
- Device driver calls don't mess up registers anymore.
- Added proper handling of input and output status device commands according to information from Bob Smith.
- Unecessary pushf/popfs removed from int2f_handler.
- Modify int15_handler to not clobber return flags when function 0x87 is forwarded to previous int15 handler.
- Rearranged order of the fields in the handle struct for smaller resident memory size.
- Merged the variables hma_used and a20state into flags.
- Resident VDISK detection added back. According to the specification it isn't sufficient to just check for VDISK at installation time. (Note that I mistakenly removed the resident checking, not Lixing Yuan.)
- Only check for VDISK until HMA has been allocated.
- Proper stack frame setup made huge space savings possible.
- Improved XXMS valid number check for smaller size. (It should be the most optimal possible now, sizewise.)
- XMStest has been removed as it requires a Borland 16-bit C compiler. (If you really need the program extract it from an earlier FDXMS release.)

Changelog of FDXMS 0.92.Oranges

- VDISK detection in check_vdisk corrected by Lixing Yuan.
- Only call check_vdisk at installation time by Lixing Yuan.
(Evidently those two corrections to VDISK handling make SMARTDRV work with FDXMS.)

Changelog of FDXMS 0.91.Apples

- FDXMS now only warns if it can't disable the A20 line instead of refusing to load (bug 1352).
- INT15 parameter added.

Changelog of FDXMS 0.9.Sand

- Squeezed out some more bytes by rearranging xms_free_xms.
- Squeezed out some more bytes in trace version by substituting test with bt in xms_dispatcher.
- Squeezed out some more bytes in validation of AH in xms_dispatcher.
- Corrected not recognising the BIOS switch in the non-TRACE versions (bug 880).
- Corrected 386 detection by Ralf Quint and me.
- Maximum XMS memory is 0xfcb0 KiB, not 0xffff KiB. Changed code to reflect this. (Note that maximum XXMS memory is much larger.)
- Use smsw instead of mov cr0 to detect protected mode.
- Now fdxxms.sys has been tested with 512MiB.
- Added PS parameter that modifies the A20 line switching code so FDXMS works on PS/2 Model 30 (and perhaps other PS models) (bug 753).
- Added GEODE parameter that modifies the delay routine so FDXMS works on National Semiconductor's Geode GX1 200MiHz processors (bug 886).
- Added DELAY parameter and using it in enable_a20 and disable_a20 (bug 1038).
- Changed a lot of "or reg1, reg1" to "test reg1, reg1".
- Removed BIOS_FLAG from the flags variable and added insertion of near jmp to do_bios_move if the BIOS parameter was given.

Changelog of FDXMS 0.8.Grains

- xms_move_xms: add illegal ovelap check in BIOS path.
- Added a flags byte.
- Made the bios variable a bit in the flags variable.
- Made the initialized variable a bit in the flags variable.
- Really only initialise once by looking at said bit.
- Corrected my erroneous correction of xms_query_free_xms (RBIL is a little confusing here).
- Minor adjustments to XMStest.c.
- Corrected xms_query_free_xms which didn't return BL == 0xa if all XMS memory is allocated.
- Corrected xms_get_move_addr which could be fooled by large offsets or sizes while verifying length was valid.
- Proper copyrights added to cptest.c.
- Optimised away the redundant variable xms_size.
- Added printout of how much XMS memory that was found.
- Added an XXMS version (fdxxms.sys) supporting 4GB (4GiB untested, but up to 384MiB tested).
- Decreased size by using a register instead of immediate in xms_free_xms and xms_dispatcher.
- Made XMStest use a better seed for more randomness.
- Watch out for AX=0xe801 in INT15 handler.
- Properly clear the carry flag in INT15 handler on success.

FDXMS releases

FDXMS 0.94.Bananas (57fff7841d29adeaca6e82c265713bda)
FDXMS 0.93.Strawberries (4d2bc249ae2468ffdc852a941baafa95)
FDXMS 0.92.Oranges (87ba33f7ee70787e770338ce355a6ac0)
FDXMS 0.91.Apples (59b961b577052efad5123403c805ed50)
FDXMS 0.9.Sand (2160327143e0d7099f0e7b9831bcd832)
FDXMS 0.8.Grains (aa3b7d97328c00e10861d2bd6743d649)
FDXMS 0.7.Pocket (8e10eb83ed1e908f626700b322c50f32)
FDXMS 0.6.Stars (60bc19ac4a7b796bbba650c91a926c52)
FDXMS 0.5.Sun (290199d33a7a7f5290f0ba45ce6074b5)
FDXMS 0.4.Dying (bf799c957328bbf85bf25713361408d2)
FDXMS 0.3.Realm (c836c71dc140c0e6884fa8e2117e3c8d)
FDXMS 0.2.Within (e98156464d0d35c62d87cc603dc5f146)

md5sums in parentheses. Also available as a file, fdxms.md5.