Starting with 1.47, changes marked with SYSLINUX, PXELINUX, ISOLINUX
or EXTLINUX apply to that specific program only; other changes apply
to all derivatives.

Changes in 6.03:
	* chain: Fix chainloading on 6.02 (Raphael S. Carvalho).
	* core: Do not leak the __lowmem and __bss16 macros to modules;
	  hide them so modules will not use them.
	* load_linux: Do not use size heuristic for non-relocatable
	  kernels, for zImage kernels and for non-Linux kernels.
	* PXELINUX: Fix the SENDCOOKIES feature for HTTP
	  (Russel Santillanes).
	* gnu-efi: Add gnu-efi as a submodule.
	* ANSI: Support color tables with more than 256 entries
	  (James Buren).
	* EFI: Fix displayed version; add DATE (Gene Cumm)
	* PXELINUX, EFI: Fix bad read of file size over TFTP on EFI64
	  (Sylvain Gault).
	* Fix hand over to kernel:
	  "Booting kernel failed: Invalid argument" error.
	* ISOLINUX: EDX, LBA values higher than 65535; work around for
	  buggy BIOS, where the system would hang, would reboot, or
	  would show a "Disk error 01, AX=42" message.
	* core/legacynet: Enable dot quad resolution (Gene Cumm).
	* diag/geodsp improvements (Gene Cumm).
	* DOS: Fix syslinux.com DOS-based installer.
	* Improve gcc 4.3.0 compatibility.
	* syslxint: fix compilation on non-x86 architectures.
	* localboot: Fix "localboot 0x80" and similar cases.
	* Add memset() calls prior to any intcall() and other mem fixes;
	  specially relevant for older hardware and/or buggy BIOS.
	* poweroff.c32: Fixes (Gene Cumm).
	* HDT: Fix memory leak in CLI (Felipe Pena).
	* ACPI: Remove memset of buffer; it makes things clearer but
	  also prevents some compilation warnings (Erwan Velu).
	* Add manpages for isohybrid, memdiskfind
	  (Peter Jones, Gene Cumm).
	* ISOLINUX: Experimental Rock Ridge support (Thomas Schmitt).
	* comapi: Remove the comapi interfaces.
	* EFI: Fixes on PE files and OVMF compatibility
	  (Sylvain Gault, Gene Cumm).
	* EFI: Updates and fixes for gnu-efi sub-module
	  (Sylvain Gault, Gene Cumm).
	* BIOS: Fix low memory check.
	* Filesystem UUID to SYSAPPEND bit 0x40000 for FAT and ext2
	  (Serj Kalichev).
	* Makefiles: Export the firmware type as a cpp variable.
	  Additional improvements. Fix "make spotless".
	* core, BIOS: Move __syslinux_shuffler_size to assembly.
	  Actually get the shuffler size sanely. Fix booting recent
	  Syslinux versions on certain hardware and on certain
	  virtualization software (e.g. QEMU 0.11.1, VirtualBox 4.1.x).
	* lua: Upgrade to v.5.2.3 (Ferenc Wágner) and additional fixes.
	* chainload: Fixes to chain.c32 and pxechn.c32.
	* NTFS: Make byte_shift a constant.
	* NTFS: Correct parsing of file runs (Andy Alex).
	* core, BIOS: Correct detection of EDD (Andy Alex).
	* core: Avoid initializing the cache more than once
	  (Raphael S. Carvalho).
	* NTFS: Handle fragmented $MFT file (Andy Alex).
	* BIOS: Use int 0x16, ah=0x02 to probe for shift flags. Attempt
	  workaround for USB keyboards not responding at boot time.
	* kbd: Getting the keyboard shift state is now a firmware method.
	* kbd: Fix force-prompt features.
	* BTRFS: Fix booting on BTRFS.
	* cache, btrfs: Provide a general cached read routine.
	* NTFS: Correct file->offset usage in ntfs_readdir (Andy Alex).
	* New support for UFS/FFS (UFS1/2) (Raphael S. Carvalho).
	* adv: Remove double definition;
	  it should fix uses of the ADV, including "--once".
	* memdump: Remove old obsolete COM16 binary.
	* isohybrid: Numerous fixes (Thomas Schmitt).
	* chain.c32: Add an adjustable "strict={0,1,2}" flag, improve
	  error reporting (Michal Soltys.)
	* lpxelinux.0: Workaround for various buggy BIOSes (Gene
	  Cumm.)
	* PXE: Fix a stack-smashing bug which broke a large number of
	  systems.

Changes in 6.02:
	* efi64: Add support for booting 32-bit kernels.
	* efi: Use the EFI handover protocol when booting kernels if
	  available.
	* Fix various make targets that became broken when switching to
	  per-firmware object directories, including 'make install' and
	  'make netinstall'.
	* efi: Improve handling of packet loss in UDP stack.
	* tests: Introduce a new regression test framework designed to
	  ensure bugs are not reintroduced once fixed.
	* efi: Implement localboot support.

Changes in 6.01:
	* efi: Mark some symbols as __export otherwise libcom32.c32 and
	  vesamenu.c32 will refuse to load.
	* bios: Wire up the bios kernel loader. It was impossible to
	  load a kernel from bios in 6.00.
	* efi: Fix 'make installer'. There are no EFI installers so
	  don't try and build them as we run into build errors.
	* efi: Reuse the initial TFTP client port in subsequent
	  transfers otherwise the server will send an error packet.
	* efi: Some firmware will not set a default TTL value in IP
	  packets - we must explicitly set it ourselves otherwise a
	  value of zero may be used.
	* bios, font: Fix a font regression affecting some VirtualBox
	  users.

Changes in 6.00:
	* Add support for booting from EFI.
	* EFI TCP/IP support. This allows the EFI backend to hook into
	  the generic TFTP, HTTP and FTP functionality.

Changes in 5.11:
	* Dynamic debug support: Add new module, debug.c32, that allows
	  debug code to be dynamically enabled and disabled at runtime.

Changes in 5.10:
	* PXELINUX: An entirely new network implementation based on
	  the lwIP embedded TCP/IP stack.  As a result, plain PXELINUX
	  can now support HTTP and FTP without gPXE/iPXE.  ls/readdir
	  functionality is supported over HTTP with an indexing
	  webserver, or over FTP with most common FTP servers. For the
	  new network stack use lpxelinux.0. For the legacy stack use
	  pxelinux.0.
	* Rename the "ipappend" option to "sysappend" ("ipappend" is
	  still accepted as an alias) and make it available for all
	  derivatives.  Add additional strings derived from the system
	  DMI/SMBIOS information if available.
	* "sysappend" strings are also sent as http cookies, with the
	  prefix _Syslinux_ added, on all http transfers.  This can be
	  overridden with the SENDCOOKIES configuration file command.
	* poweroff.c32: A new module to power off a system via APM. It
	  replaces the poweroff COMBOOT module (Sebastian Herbszt).
	* PXELINUX: Fix booting with DHCP options 209 and 210 which was
	  broken in 5.00.
	* Handle loading kernel images with no protected mode code. A
	  legitimate kernel image can consist solely of real-mode code.
	  The support for booting such images was broken in 5.00 (Josh Triplett).
	* Fix a regression in the .psf font file loader introduced
	  in 5.00.

Changes in 5.01:
	* txt/: A new AsciiDoc documentation set (work-in-progress)
	  (Gene Cumm).
	* core: Fix a bug in the realloc() implementation that caused
	  machines to appear to run out of free memory.
	* ldlinux: Fix multiple buffer overflows in cmdline parsing
	  code that resulted in files failing to run and cmdlines
	  being truncated.
	* core: Fix debug build by tagging __bad_SEG() with __export.
	* com32: Restrict library filenames to 8.3 format.
	* EXTLINUX: Fix installation and subdirectory patching.
	* ISOLINUX: Fix booting isohybrid images that are over 32K.
	* com32: Strip modules to reduce their size.
	* XFS: Implement directory block cache and fix
          shortform-directory lookup (Paulo Alcantara).

Changes in 5.00:
	* com32: Switched from the COM32 object format to ELF as it is
	  a much more powerful format that allows undefined symbols to
	  be resolved at runtime and dynamic loading of module
	  dependencies, which means modules now become shared object
	  files instead of statically linked binaries - reducing both
	  disk space and runtime memory consumption.
	* core: Split non-core functionality into ldlinux.c32, which
	  is an ELF module loaded by the core that contains everything
	  the core doesn't require to boot the system, e.g. config
	  parser, command-line interface, etc.
	* Replaced __intcall() calls with direct function calls now
	  that we can resolve undefined symbols at runtime, thanks to
	  the ELF object support. Now that we no longer need to go
	  through the 16-bit interrupt mechanism we can make full use
	  of the 32-bit execution environment. This change required
	  reimplementing lots of the 16-bit assembly code from core/
	  in C.
	* com32: __com32.cs_bounce is gone now we always run in a
	  32-bit environment once we execute ldlinux.c32.
	* ldlinux: A new "PATH" directive was added to the ldlinux.c32
	  config parser that specifies a colon-separated list of
	  directories to search when attempting to load modules.
	* ALL: Delete all references to/code for 16-bit COMBOOT files.
	  COMBOOT files (.cbt and .com) are no longer supported under
	  Syslinux.

Changes in 4.07:
	* EXTLINUX: fix crash caused by dereferencing garbage pointer.
	* Plug memory leak in searchdir which eventually leads to an
	  observable hang (Shao Miller).
	* ISOLINUX: fix bug triggered by isohybrid images larger than
	  32K which results in an invalid image checksum error.
	* menugen: make it Py3k compatible (Paulo Alcantara).

Changes in 4.06:
	* Support for NTFS, by Paulo Alcantara.
	* EXTLINUX: more robust device detection, allow user to override.
	* kontron_wdt.c32: Add a new module to enable the hardware
	  watchdog of some Kontron boards. It allows enabling the watchdog
	  and then booting a given image.
	* HDT updated, and now can display images regarding some detection
	  steps. Add postexec command to run a particular entry after
	  HDT's execution, add silent option and various fixes.
	* ifcpu.c32: Detect hypervisor presence.
	* lua.c32: Add dhcp support and support for native Syslinux
	  functions syslinux_config(), syslinux_ipappend_strings() and
	  syslinux_reboot().
	* isohybrid: Workaround for various EFI systems.
	* pxechn.c32, a PXE NBP chainloader.  More versatile alternative
	  to pxechain.com and resolves the PXELINUX -> WDS issue with
	  Microsoft Windows Server 2008R2 (Gene Cumm).
	* btrfs: Fix booting off of a subvolume.
	* com32: Add device tree support.
	* SYSLINUX: Fix relative paths for VFAT. The CONFIG and APPEND
	  directives now support entirely relative paths.

Changes in 4.05:
	* HDT updated, and now supports uploading data to a TFTP
	  server.
	* ISOLINUX: remove the .img file support; it has been broken
	  on virtually all systems since the beginning, and has been
	  totally broken since 4.00 at least.  Use MEMDISK instead.
	* chain.c32: Support chaining ReactOS' FreeLdr (Shao Miller)
	* isohybrid: -m option to add support for Mac EFI booting.
        * ifmemdsk.c32: Choose boot option based on presence of
	  MEMDISK.
	* Remove bogus distributed mk-lba-img binary.
	* The Syslinux project has a new, cool logo by Abi
	  "ixxvil" Rasheed (doc/logo/*).

Changes in 4.04:
	* PXELINUX: Fix handling of unqualified DNS names.
	* PXELINUX: Fix timer bug when PXELINUX might be unloaded
	  (Gene Cumm).
	* core/writedec.inc: Fix duplicate declaration and overflow
	  (Gene Cumm).
	* GCC 4.5 fixes.
	* sample directory: Fix Makefile include (Gene Cumm).
	* ver.com: New universal DOS/COMBOOT application to display
	  version information (includes DRMK) (Gene Cumm).
	* rosh.c32: updated; Using getopt() for internal commands to aid
	  parsing options; Fix bugs in ls; add warm reboot and echo
	  (Gene Cumm).
	* com32: fix a file descriptor leak.
	* gfxboot.c32: handle TEXT..ENDTEXT; error out on no LABELs
	  found (Sebastian Herbszt).
	* Fix booting on non-partitioned devices.
	* MBR, isohybrid: Workaround for a BIOS issue on Acer
	  Travelmate and possibly other machines.
        * COM32: Adding ACPI parsing libary
        * HDT: Release 0.4.1 to support ACPI parsing, 
          improved mutli-core/cpu reporting 
	* LUA: Updating to 5.1.4-2
	* SYSLINUX: core/diskstart.inc: Reset DS after checksum in case
	  it isn't 0 (Gene Cumm).
	* win64: Script update for additional mingw compiler names
	  (Gene Cumm).
	* diag: New directory for diagnostic-related tools.  Add a
	  handoff MBR/VBR and geometry display images (Gene Cumm).
	* MEMDISK: use "mem=" parameter to mark available memory above
	  this point as reserved (core already does alignment) (Gene Cumm).
	* MEMDISK: Additional disk probe checks and debug output
	  (Shao Miller, Gene Cumm).
	* gpxe: add gpxelinuxk.0, based off of undionly.kpxe + new
	  script (Gene Cumm).
	* isohybrid: install the isohdpfx*.bin/isohdppx*.bin files to
	  make isohybrid images in one step with GNU xorriso.
	* PXELINUX: disable a hack that would make localboot work on
	  some machines, but break just about as many.  Some machines
	  which worked with "localboot 0" in previous versions may
	  need "localboot -1" in this one.  If you have a machine
	  which requires "localboot -1", a copy of the dmidecode
	  or sysdump output would be appreciated.
	* Include a set of diagnostics by Gene Cumm.
	* Fixes for gcc 4.6 and binutils 2.21.51.
	* chain.c32: Allow "uuid" as a synonym to "guid".
	* Handle directory names starting with .. for vfat and
	  iso9660.
	* New MENU HIDDENKEY command to provide a one-keystroke way to
	  activate a boot option from a hidden menu intro screen.

Changes in 4.03:
	* Don't hang if no configuration file is found.
	* Better support for booting from MBRs which don't pass
	  handover information.
	* EXTLINUX: Try to be smarter about finding the partition
	  offset.
	* chain.c32: support chainloading Dell Real Mode Kernel (Gene
	  Cumm).
	* chain.c32: fix booting in CHS mode.
	* rosh.c32 updated (Gene Cumm).
	* Fix the -s option to the syslinux/extlinux installer (Arwin
	  Vosselman).
	* isohybrid: fix padding of large images (PJ Pandit).

Changes in 4.02:
	* SYSLINUX: correctly handle the case where the -d option is
	  specified with a non-absolute path, i.e. "syslinux -d
	  syslinux" instead of "syslinux -d /syslinux".
	* ISOLINUX: recognize the directory names /boot/syslinux and
	  /syslinux, and the filename syslinux.cfg in addition to the
	  isolinux-specific names.  Thus, "syslinux.cfg" is now a
	  generic name, whereas "isolinux.cfg" or "extlinux.conf" is
	  specific to different derivative.
	* chain.c32: support setting alternate config filename for
	  stage2 of GRUB Legacy (Gert Hulselmans).
	* whichsys.c32: execute specific command, based on Syslinux
	  bootloader variant (Gert Hulselmans).
	* lua.c32: a lot of new bindings added to the "syslinux"
	  namespace: VESA, PCI, DMI, kernel loading (Marcel Ritter).
	* btrfs: print a comprehensive error message if compressed or
	  encrypted files are encountered (neither is currently
	  supported.)
	* SYSLINUX: mtools installer: honor TMPDIR, error out on disk
	  full.
	* Handle fallbacks from EDD to CHS, to deal with systems which
	  announce EDD support but don't actually have it.
	* SYSLINUX: the mtools, DOS and win32 installers now use the new
	  command line options.
	* PXELINUX: fix the use of IP addresses in TFTP :: or tftp://
	  host syntax.
	* SYSLINUX: experimental Win64 installer (syslinux64.exe).

Changes in 4.01:
	* ISOLINUX: fix initialization on systems which don't zero
	  low memory.
	* SYSLINUX/EXTLINUX: fix handing of disk read retries in
	  EDD mode.
	* ISOLINUX: change the initialization sequence to avoid
	  problems with certain (old) BIOSes.  Special thanks to
	  Helmut Hullen for invaluable debugging support.
	* ifplop.c32: new module which detects if the PLoP Boot Loader
	  already has booted a CDROM or USB drive (Gert Hulselmans).
	* Correct a severe memory overwrite bug, triggered primarily
	  when selecting a very long command line in the menu system.
	* lua.c32: Lua script interpreter, currently experimental
	  (Alexey Zaytsev, Marcel Ritter, Geert Stappers).
	* PXELINUX: new option IPAPPEND 4 to append the system UUID to
	  the kernel command line.
	* PXELINUX: display BOOTIF and SYSUUID at startup time, and
	  when Ctrl-N is pressed on the command line.

Changes in 4.00:
	* Major code base changes; all filesystem rewritten in C.
	  This work was done primarily by Liu Aleaxander (Yuanhan Liu).
	* EXTLINUX: btrfs and ext4 support.  btrfs support was done by
	  Alek Du of Intel.
	* EXTLINUX is no longer a separate derivative; extlinux and
	  syslinux both install the same loader (ldlinux.sys); for the
	  Linux-based installers the extlinux binary is used for a
	  mounted filesystem; the syslinux binary for an unmounted
	  filesystem.
	* When loading a new configuration file with the CONFIG
	  command, one can now also specify a new current directory
	  with an APPEND statement.
	* Full ADV support for Syslinux, to boot-once and MENU SAVE
	  works.
	* Full support of GPT-partitioned disks, including disks
	  and/or parititions larger than 2 TiB (if supported by BIOS.)
	* The GPT handover protocol adjusted to the current T13
	  committee draft; see doc/gpt.txt.
	* HDT: code cleanup, small bugfixes
	* The "linux" syslinux installer (syslinux-nomtools) now has a
	  command-line syntax closer to the extlinux installer.  The
	  mtools, dos and win32 installers will get this new syntax
	  eventually, but it is not implemented yet.
	* chain.c32: support booting GPT partitions by index, GUID, label.
	* chain.c32: support booting the Syslinux partition with "fs".
	* chain.c32: implement gpt.txt hand-over protocol.
	* chain.c32: support for chainloading Grub stage 2.
	* PXELINUX: TFTP URL syntax (tftp://) supported even when not
	  running gPXE/gpxelinux.
	* New ls.c32 module to display the contents of the disk from
	  the command line, and pwd.c32 to display the current
	  directory.
	* rosh.c32 (read only shell) updated and hopefully usable.
	* PXELINUX: Support "localboot -1", just like the other
	  derivatives.
	* gfxboot.com removed in favor of gfxboot.c32.
	* New MENU HELP statement to display fullscreen help text as a
	  result of a menu selection.
	* memdiskfind utility that can be used with the phram driver
	  in the Linux kernel to mount a memdisk.
        * ifcpu.c32: Adding usage when no parameters are given, 
          adding PAE support.
	* ifcpu.c32, ifcpu64.c32: handle more than one argument per
	  target.
	* isohybrid: C version which does not require Perl.
	* New command MENU IMMEDIATE to permit hotkeys to activate
	  immediately without needing Enter.
	* mdiskchk.com supports a --no-sequential (or -n) option to
	  suppress the classic all-drive-probing heuristic.  Useful
	  on BIOSes who crash/hang when certain drive numbers are
	  probed.
	* ElTorito.Sys DOS driver now scans drive numbers upwards
	  instead of downwards, in order to avoid a fairly common
	  bug on some BIOSes where probing drive 0xFF causes a
	  failure.
	* NASM 2.03 or later required to build.  2.07 or later
          recommended.

Changes in 3.86:
	* chain.c32: fix chainloading the MBR of a hard disk (broken
	  in 3.85).
	* mboot.c32: report the boot loader name in the information
	  structure.
	* com32: set argv[0] in a com32 module.
	* core: add a workaround for a bug in Xen HVM older than
	  version 3.3: disable halt on those platforms.
	* Fix problems where certain operations in com32 modules would
	  cause the core to believe the system was idle.
	* MEMDISK: fix MBR detection when used with a DOSEMU header or
	  an offset.
	* MEMDISK: generate the mBFT checksum correctly.

Changes in 3.85:
	* gPXELINUX: updated to gPXE 1.0.0.  gPXELINUX can now do NBP
	  chainloading, and does not require a second DHCP.
	* vesamenu.c32: unbreak the default "grey hole" background.
	* We no longer have a built-in default of "linux auto".
	  Instead, if no DEFAULT or UI statement is found, or the
	  configuration file is missing entirely, we drop to the boot:
	  prompt with an error message (if NOESCAPE is set, we stop
	  with a "boot failed" message; this is also the case for
	  PXELINUX if the configuration file is not found.)
	* chain.c32: support chainloading Grub4DOS; patch by Gert
	  Hulselmans.
	* New tool: sysdump.c32, can be used to produce system
	  information for debugging via tftp or ymodem (serial port).
	* "vga=current" on the Linux command line is now supported.
	* chain.c32: support for Windows Recovery Console, via the
	  "cmldr=" option.
	* chain.c32: should now support loading NTLDR from different
	  type media than loaded from.
	* chain.c32: support chainloading to a FAT/NTFS partition with
	  invalid "hidden sectors" via the "sethidden" option.
	* memdisk: fix the mBFT ACPI table.
	* vesamenu.c32: if the image is smaller than the screen, tile
	  it across the whole screen.
	* mkdiskimage: -s option for producing a sparse image.
	* vesamenu.c32: support arbitrary resolution setting (beyond
	  BIOS support) on some Intel-based video chipsets.  This code
	  is a modified version of the "915resolution" tool by
	  Steve Tomljenovic; your mileage might vary.
	  
Changes in 3.84:
	* SYSLINUX: make the DOS installer work for MS-DOS 7.x/8.x
	  (Win9x/ME) again.
	* HDT: updated to version 0.3.6 (numerous changes.)
	* mboot.c32: now supports video mode setting if requested by
	  the image.
	* MEMDISK: Fix floppy images of PC-DOS.
	* MEMDISK: Add support for emulation of CD-ROM images; patch
	  by Shao Miller.
	* MEMDISK: Comply with the Win9x "safe hook" standard,
	  allowing a protected-mode driver.
	* MEMDISK: New "mBFT" ACPI table, by analogy with the iSCSI
	  iBFT table.  This allows detection from a protected-mode
	  operating system without EDD support.
	* 32-bit version of the gfxboot loader (gfxboot.c32), so far
	  experimental.  This will replace gfxboot.com in the future.
	* vesamenu.c32: new MENU RESOLUTION directive to set a screen
	  resolution other than 640x480.
	* chain.c32: add support for loading isolinux.bin.
	* chain.c32: make sure to always return to text mode.
	* eltorito.sys: DOS driver for generic CD-ROMs; by Gary Tong
	  and Bart Lagerweij.

Changes in 3.83:
	* PXELINUX: clear memory before handing over to a chainloaded
	  NBP.  This may help avoid a bug in Windows RIS.
	* PXELINUX: fix localboot after NBP chainloading on certain
	  BIOSes (including ASUS A8N-E, but possibly others.)
	* chain.c32: support chainloaded bootloaders on ISOLINUX.
	* PXELINUX: allow filenames up to 251 characters.
	* MEMDISK: fix problems booting from USB on Thinkpads, and
	  possibly other machines or hardware combinations.
	* isohybrid: fix the -id option.
	* HDT: updated to version 0.3.4.
	* MEMDISK: the stack size is now configurable, with the stack=
	  option.
	* Simple menu: fix Ctrl-W (word erase) in command-line edit.
	* Simple menu: fix crash on some platforms.
	* Gfxboot: fixes to the configuration file parsing.
	* PXELINUX: add a tool to override specific DHCP options via
	  values hardcoded in the pxelinux.0 file.  These hardcoded
	  values can be either "before DHCP" (defaults if DHCP do not
	  provide values), or "after DHCP" (overrides DHCP).  The tool
	  pxelinux-options can be used to set these options.  This
	  feature does not apply to gpxelinux.0; when used with gPXE
	  this is better handled by modifying the embedded script.

Changes in 3.82:
	* isohybrid: fix the -partok logic for loading from a partition.
	* ISOLINUX: deal with systems which return from INT 13h with
	  interrupts disabled.
	* Do not invoke the idle handler during large file loads.
	* Simple menu: make ONTIMEOUT work with MENU HIDDEN.
	* PXELINUX: handle TFTP servers which have extra NULs at the
	  end of an OACK packet.

Changes in 3.81:
	* Shuffler: fix bug in real-mode entry.  This affected a
	  number of modules, probably in relatively unimportant ways,
	  but it completely broke linux.c32.
	* Improved performance.
	* Attempt to halt the processor while idle.  This can cause
	  bad reponsiveness when using a serial console especially for
	  automated input; if that ends up being a problem, use the
	  new "NOHALT 1" configuration command.
	* linux.c32 now suppresses all messages if the "quiet" flag is
	  specified.
	* isohybrid: add a variety of options, and a help message.
	* ISOLINUX: fix booting in hybrid mode when CBIOS is used.
	  This unfortunately means that the isohybrid handoff protocol
	  has changed, so the isohybrid utility must version-match
	  isolinux.bin.
	* Drop support for ACPI 3 extended memory flags.
	* Menu system: don't set the autocr flag on the serial
	  console.
	* altmbr: fix handling of logical partitions.
	* altmbr: cap at 439 bytes so the partition select byte isn't
	  part of the file.

Changes in 3.80:
	* New shuffler mechanism and API.
	* Rewritten mboot.c32 module.
	* The syslinux_boot_linux() function has been simplified.
	* Don't hang trying to boot a "menu quit" label from the CLI.
	* Fix problem with boot-once "sticking" on some BIOSes.
	* isohybrid: fix problem with images over 2 GB in size.
	* APM poweroff module (poweroff.com) by Sebastian Herbszt.
	* ISOLINUX: fix the handling of large directories.  Bug found
	  and fixed by Steffen Winterfeldt.

Changes in 3.75:
	* PXELINUX: fix the "keeppxe" option, which was broken in
	  3.74.
	* MEMDISK: correct the extraction of geometry information from
	  the MBR of a hard disk image, again broken in 3.74.
	* extlinux(1) man page from Brian Pellin.
	* Simple menu: MENU SAVE is now controllable on a menu-by-menu
	  or entry-by-entry basis.
	* gPXELINUX: fix interrupt-disabling bug.
	* HDT: fix lockup on machines with certain PCI configurations.

Changes in 3.74:
	* New UI directive, which allows a more natural way to specify
	  a menu system (or not.)  With the UI directive specifying
	  the menu system, the DEFAULT directive can be used to select
	  the default entry inside the menus.
	* kbdmap.c32: new module to load a new keyboard map
	  dynamically.
	* isohybrid: workaround bug in some versions of binutils.
	* Fix issue with the placement of the initrd on some machines.
	* ifcpu64: fix handling of less than three arguments.
	* Fix bug in the shuffle library when dealing with a very
	  large number of fragments.
	* Documentation fixes by Vicente Jimenez Aguilar.
	* gPXE updated to version 0.9.7.
	* hdt.c32: Hardware Detection Tool, an interactive hardware
	  analyzer module by Erwan Velu.
	* MEMDISK: enable automatic determination of the disk geometry
	  for a large floppy disk image if (and only if) it is
	  formatted with a FAT filesystem.
	* SYSLINUX: fix the handling of .bss files on FAT12/16.
	* Suppress the Loading ... message if "quiet" is specified on
	  the kernel command line.
	* Fix the use of "CONSOLE 0" with menu.c32.
	* Allow COM32 modules to be aware of all memory even in the
	  presence of a memory hole.  The "linux.c32" module can be
	  used to load a kernel (or memdisk) plus large initrd on
	  such a system.
	* MBR: produce alternate MBR variants which force the drive
	  number to hd0 (_f variants), or force the drive number to
	  hd0 if the Ctrl key is pressed (_c variants.)  Furthermore,
	  add an MBR variant (altmbr*.bin) which ignores the active
	  flag and instead boots the partition number specified in the
	  byte at offset 439 decimal.
	* Add IPAPPEND strings to com32 modules, especially needed for
	  linux.c32.
	* New MENU SAVE directive which saves the latest menu
	  selection until the next boot.  Currently only implemented for
	  EXTLINUX.
	* gfxboot.com: *experimental* interface module to Steffen
	  Winterfeldt's "gfxboot" graphical front end
	  (http://gfxboot.sourceforge.net/).  Module by Sebastian Herbszt.

Changes in 3.73:
	* Upgrade gPXE to release version 0.9.5.
	* Fix a number of build errors on various platforms.
	* Handle systems with E820 "extended attributes" per ACPI 3.
	  Someone "cleverly" decided to change the E820 spec in a
	  backwards-incompatible manner!
	* MEMDISK: default to "safeint".
	* Adopt the moniker "The Syslinux Project", standard proper
	  noun capitalization, to refer to the project as a whole.
	  Thus, reserve the all-caps "SYSLINUX" to refer to the FAT
	  loader.
	* mboot.c32: add "-solaris" option to pass DHCP information to
	  the Solaris kernel; required for automatic Solaris boot
	  without using Solaris' pxeboot program.
	* config.c32: trivial COM32 module to restart Syslinux with
	  another configuration file from the command line (equivalent
	  to the CONFIG command in the configuratin file.)

Changes in 3.72:
	* Include the pxechain.com module from Jeffery Hutzelman at
	  Carnegie Mellon University.  This allows chaining another
	  PXE boot program while changing the DHCP packet passed to
	  it.
	* Reorganize the Makefile system.
	* Major PCI core cleanups and other source cleanup.
	* gPXE code updated.
	* Try to avoid memory-snooping attacks on passwords.  Note
	  that if someone has root on the box, they generally don't
	  need to compromise the boot loader...
	* ISOLINUX: fix crash when given a zero-length file.
	* sdi.c32: support gzipped SDI images.
	* ISOLINUX: support generating images which can be either
	  a CD-ROM or a hard disk (USB disk, etc.)  See
	  doc/isolinux.txt for more information.
	* Remote gdb support for COM32 modules; patch from Stefan
	  Hajnoczi.
	* Support beeps in F-key help in the simple menu system.
	* Tab display of labels, based on a patch from Sebastian
	  Herbszt.  Can be disabled with the NOCOMPLETE configuration
	  command.
	* "menu default" can now be specified after "menu begin", to
	  indicate that a specific submenu should be the default entry.

Changes in 3.71:
	* Workaround for a VESA BIOS which tries to make DOS system
	  calls(!!)
	* Simple menu: fix navigation around disabled entries
	  (or at least try to...)
	* EXTLINUX: proper error message when confused about mount
	  point.
	* MEMDISK: be smarter about incompletely disabled floppies in
	  the BIOS and about being the only floppy.
	* Optionally allow initrd to be specified on a separate line
	  rather than as part of the "append" line.  This is not
	  recommended, but apparently makes life easier for some
	  tools.
	* SYSLINUX: if no config file is present, set the current
	  directory to the root directory (Sebastian Herbszt).
	* chain.c32: option "hide" to support hiding and unhiding of
	  primary partitions on the boot drive with DOS, Win, or OS/2
	  partition types (01, 04, 06, 07, 0b, 0c, 0e).
	* Unbreak the KBDMAP command (broken in 3.70).
	* EXTLINUX: fix the handling of the ADV when using CBIOS.
	* ifcpu64.c32: simple COM32 module to select a 32- or 64-bit
	  kernel (and optionally 32-bit kernels with or without PAE.)
	  Eventually we want a scripting language for this
	  kind of stuff; a Lua module is under development.
	* Fix parsing of the SERIAL command without a baud rate
	  specified.
	* chain.c32: error out when try to boot an unbootable
	  partition.
	* SYSLINUX: when building the Win32 installer, search for
	  MinGW under a large number of possible names.

Changes in 3.70:
	* PXELINUX: Support enhanced capabilities when running on top
	  of gPXE (http://www.etherboot.org/).  In particular, support
	  URL-style syntax for filenames, and any protocol that gPXE
	  supports (except, currently, iSCSI and AoE.)  This feature
	  is currently highly experimental.
	* Substantial infrastructure changes to support files whose
	  length aren't known at open time (typically network
	  connections.)  Please note that the semantics of some of the
	  comboot APIs have changed slightly; please see doc/comboot.txt.
	* PXELINUX: We no longer require a TFTP server which supports
	  the tsize option for all transfers.
	* PXELINUX: Integrate with the gPXE source base; unified image
	  now included as "gpxelinux.0".
	* The source tree has been restructured; files that were
	  previously in the root have moved into the core, dos, gpxe,
	  and utils directories.
	* "make install", "make netinstall", and "make extbootinstall"
	  have been updated massively.  "make install-all" now installs
	  all three.
	* Change default dir for auxiliary files from
	  /usr/lib/syslinux to /usr/share/syslinux.
	* SYSLINUX: VFAT long filename support.
	* MEMDISK: Any image less than 4096K (4 MB) is treated as a
	  floppy disk.  The geometry-guessing code will recognize all
	  common extended formats, but it is still possible some very
	  exotic formats need geometry specification.  Large floppies
	  and very small harddisks still need explicit specification.
	* chain.c32: option "swap" to support swapping of BIOS drive
	  numbers.  This is necessary to boot certain operating systems
	  (DOS, Windows) from a secondary drive.
	* chain.c32: option "file=" to support loading a boot file from
	  the SYSLINUX filesystem instead of loading the boot sector
	  from the drive.
	* chain.c32: option "seg=" to control the load location.
	* chain.c32: option "ntldr=" as a shorthand for "seg=0x2000
	  file="; use this to load one of WinNT's loaders:

	  chain.c32 hd0 1 ntldr=/MiniNT/setupldr.bin

	  Note that the file needs to be in the SYSLINUX filesystem.
	* chain.32: options "freedos=" and "msdos="/"pcdos=" as
	  shorthands for "seg=0x60 file=" and "seg=0x70 file="
	  respectively; use this to load FreeDOS's kernel.sys, MS-DOS's
	  io.sys or PC-DOS's ibmbio.sys.
	* Change to the A20 algorithm which *MIGHT* help systems that
	  have systems which freeze when Syslinux is used with USB
	  keyboards.  Note that this has been hard do verify, so I
	  would greatly appreciate feedback on it.
	* Complex menu system: unbreak menus which has unnamed
	  submenus, like complex.c.
	* Fix newline on the serial port for some com32 modules.
	* chain.c32: support "boot" as the drive specification,
	  indicating the drive from which it was booted
	  (for syslinux/extlinux).
	* SYSLINUX/EXTLINUX: support "localboot" with the same feature
	  set as ISOLINUX.
	* Add an experimental MBR for GPT partition tables.
	* Use $(CC) when determining compile flags.
	* chain.c32: fix booting from logical partitions (Sergey
	  Vlasov.)

Changes in 3.63:
	* Fix errors in the PCI and DMI detection modules (Erwan Velu,
	  Sebastian Herbszt).
	* Fix host dependencies and other issues in the build system.
	* PXELINUX: Allow class E addresses as unicast.
	* sdi.c32: module to load Microsoft System Deployment Images.
	  For additional information, please see:
	    http://msdn2.microsoft.com/en-us/library/ms838543.aspx
	* EXTLINUX: Correct reading directories with deleted entries.
	* Shuffle library: correct the handling of certain geometries
	  (an upward move with source material blocking the move); as
	  required by sdi.c32 but theoretically possible for other
	  formats as well.
	* Add "make netinstall" to install /tftpboot.
	* Fix some documentation files that didn't get moved/renamed.

Changes in 3.62:
	* Clean up garbage after "aborted." message.
	* Clean up memdump.com filenames.
	* Support SHA256 and SHA512 encrypted passwords.
	* The shuffle library now can generate chained descriptors,
	  thus allowing pretty much arbitrarily complex memory maps.
	* Handle command lines up to 2047 characters, the current
	  Linux kernel limit.
	* vesamenu: support systems without linear framebuffer support
	  (sigh, what is this, 1993?) and 15-bit RGB modes.
	* Move the label storage (for the command-line interface) to
	  high memory, removing the size limit and freeing up 64K of
	  low memory.
	* Get rid of 4096-entry limit in the simple menu system.
	* New hierarchial submenu support: see MENU BEGIN, MENU END,
	  MENU GOTO in doc/menu.txt.
	* MENU QUIT allows creating a menu entry for returning to the
	  command line.
	* ISOLINUX: Work around bug in certain Adaptec BIOSes,
	  patch by Bruce Robson.
	* pngtopnm dependency removed from samples/ directory.
	* Text documentation files (in doc/) renamed *.doc -> *.txt.

Changes in 3.61:
	* EXTLINUX: fix crash when accessing an empty file.
	* elf.c32: If a PHDR segment is present, load it.
	* Fix SHA-1 and MD5 passwords.
	* ISOLINUX: fix booting when mastered without
	  mkisofs -boot-info-table (broken since 3.50, sigh...)
	* Handle BIOSes which emit multiple contiguous valid
	  memory regions in the e820 map.

Changes in 3.60:
	* Support for "auxilliary data vector", a small amount of
	  writable storage.  Currently only supported for EXTLINUX,
	  but the infrastructure is there for the other derivatives,
	  assuming a suitable storage location can be found.
	* EXTLINUX: boot-once support (--once, --clear-once, and
	  --reset-adv).
	* A command is now required to the EXTLINUX installer, i.e. at
	  least one of --install, --update, --once, --clear-once, or
	  --reset-adv.

Changes in 3.55:
	* PXELINUX: as per RFC 5071, PXELINUX no longer requires the
	  use of the magic cookie option (208) for unencapsulated
	  options.  Currently it does not require it for
	  vendor-encapsulated options (vendor-option-space) either,
	  but that MAY be reverted in the future if it causes
	  problems.
	* Documentation text files moved to a common "doc" directory;
	  man pages from the Debian project added to the "man"
	  directory.
	* Correct bug with self-overlapping memory areas when using
	  the shuffle interface.

Changes in 3.54:
	* Add "menu separator", "menu indent", "menu disabled"
	  (see README.menu).
	* vesamenu: fix handing of VESA modes with noncontiguous
	  memory buffers.  In particular, Qemu/KVM sets up such a mode
	  when Cirrus Logic emulation is enabled (which is the
	  default.)
	* Support for calling real mode functions using far calls,
	  with argument on the stack.  This was implemented to support
	  the BIOS BBS specification, but subsequent experiments show
	  that the at least one of the most common BIOS cores, Award,
	  passes the presence check but doesn't actually implement the
	  functionality.

Changes in 3.53:
	* Fix bugs related to the $PnP BIOS functionality on some
	  platforms.
	* PXELINUX: Fix the "naked" version of :: (suppress prefix.)
	* elf.c32: better error messages.
	* Faster operation under Intel VT virtualization.
	* PXELINUX: Fix DHCP bootfile option.
	* mkdiskimage: Support more than 1024 cylinders.
	* (Hopefully) fix installer on non-x86 platforms.
	* Fix shuffle_and_boot_rm, used by linux.c32.
	* Fix shuffle_and_boot_pm on 386/486.
	* ISOLINUX (at least): fix bss memory overwrite hang.
	* MBR: Fix booting from logical partitions.
	* Code cleanups.

Changes in 3.52:
	* Handle capitalized F-key commands in the menu system.
	* Fix padding error when loading multiple ramdisks.
	* Workaround for VMware crashing when trying to print a
	  message during early kernel boot (does not seem to work,
	  consider deleting.)
	* chain.c32: add the ability to search for a specific MBR
	  signature at runtime.
	* Fall back to the server identity option if the siaddr field
	  in the DHCP header isn't set.  This seems to match the
	  behaviour of most PXE stacks.
	* mkdiskimage: give the generated disk image an MBR signature.
	* MEMDISK: Fix failures on some BIOSes.
	* Simple menu system: new "MENU HIDDEN" option to not display
	  the menu unless the user presses a key.
	* Simple menu system: support MD5-encrypted passwords (modern
	  Unix standard style, with "$1$" prefixes.)
	* pcitest.c32: now functions as a full "lspci".  Thanks to
	  Erwan Velu for this work.
	* MEMDISK: Make EDD actually work.
	* ISOLINUX: Fix for certain broken CD-ROM BIOSes which
	  randomly corrupted register FS.
	* Simple menu system: fix memory overwrite bug that caused
	  some systems to lock up or behave weirdly.
	* Fix building on 64-bit systems without a 32-bit libc installed.

Changes in 3.51:
	* EXTLINUX: Fix failure to find the configuration file.

Changes in 3.50:
	* New keywords allow the type of file to be specified in the
	  configuration file.
	* It is now supported to load a different configuration file
	  with the CONFIG keyword.
	* Fix API call 0x0019 (Read Disk.)
	* MENU AUTOBOOT, MENU TABMSG, MENU PASSPROMPT allows
	  internationalization of menu messages.
	* A new feature, TEXT HELP, allows the administrator to set
	  a multi-line help message for individual selections.
	* Fix API call 0x0012 (Cleanup, shuffle and boot.)
	* New API call "Cleanup, shuffle and boot to flat protected mode"
	* New API call "Cleanup, shuffle and boot to real mode",
	  similar to API call 0x0012 but allows arbitrary register setting.
	* Introduce a library interface for loading arbitrary binary
	  formats with relatively easily understood code.  See
	  the elf.c32 module for an example on how to use it.
	* New module "elf.c32", to load a protected-mode ELF kernel.
	* MBR (old and new): Fix bug in CHS mode when LBA >
	  65535*sectors.
	* vesamenu: fix decoding of palettized PNG images.
	* Update the Linux kernel boot protocol.
	* PXELINUX: Press Ctrl-N at the boot prompt to read out the
	  network info.
	* Instead of the (non-existent) MAC, use the client identifier
	  for networks like Infiniband and Firewire/1394.
	* Add a new INCLUDE command to the core syslinux parser.
	* Allow binding help text to F11 and F12.
	* F-key help now available in the simple menu system.
	* Disabled the polling for ARP during idle.  It is simply too
	  slow on some (broken!) PXE stacks.
	* PXELINUX: also try to fetch the config file based on UUID.
	* SYSLINUX/EXTLINUX: New RAID mode (-r) which calls the BIOS
	  to load the next device (typically the next drive) on boot
	  failure.

Changes in 3.36:
	* MEMDISK: Disable EDD by default on floppy disks.  EDD can be
	  enabled with the "edd" option and disabled with "noedd".
	  This (hopefully) should make Ghost work again.
	* SYSLINUX: "unix" installer now uses Linux ioctls instead of
	  using libfat.
	* New MBR which can boot from logical partitions.
	* SYSLINUX: Fix bug in detecting special extensions which was
	  introduced in 3.35 :(
	* PXELINUX: Unbreak chainbooting FreeBSD (and possibly others.)

Changes in 3.35:
	* MEMDISK: New "safeint" mode.
	* MEMDISK: Be more compliant with the PnP BIOS spec.
	* MEMDISK: Turn on EDD support by default.
	* MEMDISK: Try to work on some machines on which it would not
	  work when there was no floppy drive in the system.
	* Simple menu system: fix serial console support (broken in
	  3.30).
	* SYSLINUX: Support subdirectories.  Like ISOLINUX, the
	  "current directory" is the directory in which syslinux.cfg
	  is found; this is searched for in the sequence
	  /boot/syslinux, /syslinux, /.  As a side benefit, label names
	  like "linux-2.6.18" and "linux-2.6.19" are now supported.

	  To install ldlinux.sys in a subdirectory, pass the -d
	  directory option to the SYSLINUX installer.

	  This work was sponsored by slax.org (thanks, Tomas!)
	* New API call: read disk.
	* Invoke ONERROR on initrd load failure.

Changes in 3.31:
	* The simple menu system (menu.c32 and vesamenu.c32) now
	  support loading more than one configuration file at a time,
	  using MENU INCLUDE or by specifying multiple filenames.
	* The MENU COLOR statement can now control the shadowing mode.

Changes in 3.30:
	* libcom32 extended to support graphics mode and graphical console.
	* vesamenu.c32, new graphical version of the Simple
	  Menu System, see README.menu.
	* New com32 modules by Erwan Velu do selection based on CPUID
	  or PCI devices present.
	* RPM spec: add syslinux-tftpboot module; move syslinux by
	  default to the /usr/share/syslinux directory.
	* RPM spec: extlinux is now a separate package.

Changes in 3.20:
	* EXTLINUX: New options --install (-i) and --update (-U), to
	  make it clear if a boot loader should be installed or
	  updated.  For now, defaults to --install for compatibility;
	  a future version will require one of these options.
	* New library functions to load and place files in memory.
	* mboot.c32 bug fixes.
	* Remove 8 MB kernel size restriction.
	* Add "klibc" target for building unix/syslinux and
	  extlinux/extlinux with klcc (klibc-1.4.27 or later.)
	* PXELINUX: Fail (and eventually reboot) if no configuration
	  file was found.
	* COM32 module by Erwan Velu to make decisions based on DMI
	  info.
	* Fix issue where going back and forth between menus a lot
	  would cause a hang.
	* ISOLINUX: Fix bug which made "cd boot sectors" not work.

Changes in 3.11:
	* MEMDISK: Fix bug by which accessing the real floppy disk
	  as B: in MS-DOS was broken.
	* Simple menu system: allow tweaking of the screen layout.
	* Simple menu system: better command-line editing, correctly
	  handle command lines above 256 characters.
	* PXELINUX: revert memory allocation change that caused
	  problems on some network cards.
	* MEMDISK: Try work around a bug on some BIOSes when no
	  physical floppy disk is present in the system.
	* Enable the 16550A FIFOs, if present, when doing serial
	  console.
	* New "totaltimeout" command establishes a timeout without
	  regard for any user input.
	* Simple menu system: timeout behaviour now more in line with
	  user expectations.
	* Simple menu system: "ontimeout" should now work correctly.

Changes in 3.10:
	* gcc 4.0.1 compilation fixes.
	* Add support for querying the PCI BIOS in libcom32
	  (used by ethersel et al.)
	* Fix PCI handing (ethersel etc) on several old chipsets (and
	  VMWare.)
	* Try to deal with systems with broken EBIOS.
	* New API call to do "localboot".
	* New API call to query features.
	* New API call to run kernel image, a lower-level call than
	  "run command".  See comboot.doc.
	* Fix for bug in EBIOS code discovered by Arwin Vosselman.
	* NOESCAPE security fix.
	* Comments are now recognized even without a space following #.
	* Fix incorrect handling of mixes of entries with and without
	  MENU PASSWD.
	* The idle API call now harmlessly returns failure if it is a
	  no-op.  That way the caller can decide whether or not to
	  bother invoking it again.
	* Temporarily disable the idle API call on PXELINUX, due to
	  some platforms on which the idle API call seems to hang; this
	  problem has not yet been debugged.
	* MEMDISK: the handling of DOSEMU-headered images was broken;
	  fix it.
	* EXTLINUX: symlinks are now supported.
	* Simple menu system: N and P now work correctly as hotkeys.
	* MEMDISK: more BIOS bug workarounds.

Changes in 3.09:
	* gcc4 compilation fix.
	* <BEL> (Ctrl-G) in message files now causes a beep.
	* Reduce the command line to 511 characters; 1023 caused
	  memory overflows.

Changes in 3.08:
	* SYSLINUX: Fix performance regression (-s mode always
	  enabled.)
	* Add API function for idle loop.
	* libutil: Add do_idle() function for idle loop, make
	  get_key() use it.
	* libutil: Add SHA-1 and base64 functions.
	* Simple menu system: add password support.
	* EXTLINUX: Sparse files now handled correctly.
	* EXTLINUX: Large directories now handled correctly.
	* ALL: At the prompt, Ctrl-X now forces text mode.
	* Fix configuration file parsing error, that could cause
	  hangs.
	* Rewritten advanced menuing system from Murali Ganapathy.
	* MEMDISK: New "bigraw" mode to work around certain broken
	  BIOS flash programs.
	* COM32 module to boot Multiboot systems, including Xen.  See
	  com32/modules/mboot.doc.
	* Max command line changed to 1023 characters.  Note that the
	  kernel proper still can only handle 255 characters without
	  patching, and COM16 binaries can only handle 125 characters.

Changes in 3.07:
	* Fix chainloading (chain.c32).
	* Fix zlib build problem.
	* Use a private copy of <linux/ext2_fs.h>.

Changes in 3.06:
	* Fix typo that caused the ramdisk to load in the wrong place.

Changes in 3.05:
	* New API function "shuffle and boot"; allows COM32 modules to
	  load or construct (almost) arbitrarily complex objects,
	  e.g. a kernel and its initrd/initramfs in pieces, and have
	  the API core reorganize memory for booting.  (A library API
	  for this function will be introduced in a later version.)
	* The initrd= option now supports multiple filenames separated
	  by commas.  This is mostly useful for initramfs, which can
	  be composed of multiple separate cpio or cpio.gz archives.
	  (Note: all files except the last one are zero-padded to a 4K
	  page boundary.  This should not affect initramfs.)
	* EXTLINUX: Fix API function 000Ah (get derivative-specific
	  info).
	* libcom32/ethersel: Support PCI Config Mechanism #2 on
	  machines still infested with that hideous old hack.
	* SYSLINUX: Fix directory-parsing bug.

Changes in 3.02:
	* SYSLINUX: The "unix" installer now sets the MS-DOS
	  attributes (hidden, system, readonly.)
	* COM32 library: build the .lnx (test modules for running
	  under Linux) as architecture native modules, in case
	  i386 devel libraries aren't installed.
	* EXTLINUX: Hack for systems which don't have BLKGETSIZE64
	  defined in the standard header files.
	* Simple menu system: minor aestetic improvements, and try to
	  work better over a serial console (speed, and readability on
	  monochrome terminal emulators.)
	* New CONSOLE directive to control output on the video console
	  (useful for dealing with some broken serial-forwarding
	  BIOSes.)
	* New com32 module "ethersel" for searching for an Ethernet
	  card and selecting the proper version of Etherboot.
	* EXTLINUX: Allow the user to override the detected geometry.
	  Add help.

Changes in 3.01:
	* EXTLINUX, SYSLINUX: Fix compile errors on some systems.
	* EXTLINUX: Default to zipdrive geometry (64 heads, 32
	  sectors) if no other geometry can be detected.

Changes in 3.00:
	* SYSLINUX: Support FAT32 and EDD.  As an unfortunate
	  consequence, LDLINUX.SYS is no longer an ordinary file; it
	  is block-mapped at install time, which means it can only be
	  written using the syslinux installers.
	* SYSLINUX: Reorganize the source code for the installers;
          each one of the installers (dos, win32, unix, mtools) is now
          built in its own subdirectory.  In particular, "mtools" is
	  the unprivileged installer which uses mtools; "unix" is the
	  privileged installer which uses system calls.
	* SYSLINUX: Completely rewritten DOS installer in C.
	* ALL: "label" statement information is now stored in a
	  compressed format, which means that a lot more labels are
	  permitted (500-1000 in a typical configuration, but depends
	  on the complexity.)
	* EXTLINUX: New derivative, which boots from an ext2/ext3
	  filesystem.
	* SYSLINUX: The DOS and Win32 installers can now optionally
	  write the boot sector to a file instead of the real boot
	  sector.  This is not supported in the Linux installers,
	  however.
	* ALL: New NOESCAPE command, disables the "hold down the Shift
	  key to display the prompt" behaviour.
	* New simple menu system, as an alternative to the advanced
	  menu system already present.  See README.menu for details.
	* PXELINUX: Filenames can now be prefixed with an IP address
	  or DNS name plus :: (e.g. 192.0.2.1::filename or
	  server.domain.com::filename), which downloads a file from an
	  alternate TFTP server, or just a :: (e.g. ::filename), which
	  suppresses the common pathname prefix.  See pxelinux.doc.
	* SYSLINUX: Add an -m option to the DOS and Win32 installers
	  to write an MBR and -a to mark the partition SYSLINUX is
	  being installed on active.
	* MEMDISK: Give a way to query the boot loader type while
	  running MEMDISK; see memdisk/memdisk.doc and
	  sample/mdiskchk.c.
	* mkdiskimage: substantially improved mkdiskimage which, among
	  other things, can now be used to initialize USB keys as
	  zipdrives; see README.usbkey for more information.

Changes in 2.13:
	* MEMDISK: Fix command-line parsing "brown paper bag" class
	  bug.
	* MEMDISK: Add "raw" mode to support the DOS boot disk from
	  WinME/XP, which seems to deliberately crash the system
	  when someone uses the "INT 15h mover" highmem API.
	* Make "make install" do something sane for the com32
	  development environment.
	* In the spec file, create a separate -devel RPM for the com32
	  development environment.

Changes in 2.12:
	* Simple C library, based on klibc, for writing COM32
	  programs.
	* Fix the handling of file length in loading of COM32
	  programs.
	* MEMDISK: Work around a linker bug by rearranging the code to
	  not use the linker for the 16-bit code.
	* SYSLINUX: If we're building on a machine without a Win32
	  (mingw) compiler, just skip building syslinux.exe.
	* ISOLINUX: Support non-mkisofs mastering programs, at least
	  as long as the image is single-session.  For best results,
	  ISOLINUX should be the only boot loader installed.
	* MEMDISK: Allow the user to specify that the simulated disk
	  should be write-protected.

Changes in 2.11:
	* ALL: Add an API call to get the configuration file name.
	* SYSLINUX: Fix bug in 2.10 that prevented it from working
	  correctly for a lot of people.
	* SYSLINUX: In the installer, make mtools a bit less fussy.
	* Make the menu system compile with newer gcc's.

Changes in 2.10:
	* MEMDISK: Handle images compressed with zip as well as with
	  gzip.  Some Windows-based image tools apparently generate
	  these kinds of images by default.  Patch by Patrick
	  LoPresti.
	* Major menu improvement from Murali Ganapathy.
	* ISOLINUX: Wonderfully sick and brilliant workaround for
	  severe bugs in certain Award BIOSes; from Knut Petersen.
	* SYSLINUX: Fix for the nomtools installed, from Frederic
	  Pasteleurs.
	* PXELINUX: Fix handling of IP numbers in the ranges
	  100-109 and 200-209.
	* ALL: New option "allowoptions" (defaults to 1), which
	  controls if options are allowed on the command line or not.
	* SYSLINUX: Support building under klibc (see the klibc
	  distribution for details.)

Changes in 2.09:
	* SYSLINUX: Remove residual setuid crap from
	  syslinux-nomtools.
	* Handle video pages correctly when using the API functions.
	* Handle compiling on an x86-64 platform correctly.
	* Menu system from Murali Krishnan Ganapathy; see the menu
	  directory for information.
	* COMBOOT: Allow COMBOOT programs to change screen text mode.
	* COMBOOT: Correct the documentation of how to detect
	  SYSLINUX from COMBOOT!!!!
	* COMBOOT: Fix "get key without echo" API function.
	* SYSLINUX: Fix bug that affected the API open function.
	* ALL: Improve the E820 memory parser, to work around some
	  buggy BIOSes.

Changes in 2.08:
	* Add new configuration command "ontimeout" to allow timeout
	  to have a different action than just pressing Enter.
	* Add new configuration command "onerror" to allow a custom
	  command to be executed in case the kernel image is not found.
	* Fix bugs in the COMBOOT/COM32 command-line parsing.  APPEND
	  now works with COMBOOT/COM32 images.
	* PXELINUX: Poll for ARP requests while sitting at the
	  prompt.  This makes some boot servers a lot less unhappy.
	* PXELINUX: Actually free sockets when we get a failure
	  (including file not found.)  This bug would cause us to run
	  out of sockets and thus "go deaf" after a while.
	* MEMDISK: Add an API to query for the existence of MEMDISK.
	* SYSLINUX: Fix loading boot sectors (.bs/.bss) from floppy
	  disk.
	* .c32 is now one of the extensions searched for
	  automatically.
	* PXELINUX: RFBG.exe seems to randomly overwrite memory
	  location 0x5700.  Thus, don't use it!
	* PXELINUX: Change pathname length max from 63 to 127; change
	  max vkernels from 128 to 64.
	* Support Ctrl-U -> kill entire command line input.
	* The "samples" directory contains a (barely at all tested)
	  chain loading example, chain.c32, which may be used to
	  chainload local floppy disks and hard disks.  Use with
	  "chain fdN" or "chain hdN [partition]"; N = 0 for the first
	  drive of each type.

Changes in 2.07:
	* MEMDISK: Workaround for BIOSes which go into a snit when
	  they get a RESET command for the floppy system when there is
	  no floppy in the system.
	* PXELINUX: Add "ipappend 2", which passes the hardware
	  address of the boot interface to the kernel as a
	  command-line option.
	* mkdiskimage: fix the generation of the end limit.
	* PXELINUX: Fix multiple bugs in chainloading of other NBPs.
	* MEMDISK: Fix bug that would occationally cause "ran out of
	  input data" when using compressed disk images.
	* SYSLINUX: Updates for the win32 installer (from Lars Munch.)
	* PXELINUX: PXELINUX-specific options are now recognized both
	  in a vendor-option-space (a.k.a. type 43 encapsulated) as
	  well as in a site-option-space (unencapsulated.)
	* COM32: Don't crash when DS != 0.
	* COMBOOT/COM32: Make file reading work correctly.  Thanks to
	  Phung Chi Kien for submitting a test program.

Changes in 2.06:
	* ALL: Fix problem that would occationally cause a
	  boot failure, depending on the length of the kernel.
	* ISOLINUX: Fix problem that would occationally cause a
	  boot failure, depending on the length of directories.
	* SYSLINUX: Win32 installer now flushes buffers.
	* ppmtolss16: Be fully compliant with the PNM spec;
	  actually process comments in the header and odd
	  alignments of the various parameters, as well as
	  "plain" (not raw) files and PBM and PGM files.
	* PXELINUX: Lower the default MTU to 1472 in order to deal
	  with systems with slightly nonstandard MTUs, and PXE
	  stacks which don't defragment correctly.  Unfortunately this
	  is very hard to test dynamically.

Changes in 2.05:
	* PXELINUX: Add a default query based on the hardware address
	  of the boot device.  This is in lower case hexadecimal form
	  separated by dashes and including the hardware type, for
	  example, the Ethernet (type 1) address 88:99:AA:BB:CC:DD
	  would query the file pxelinux.cfg/01-88-99-aa-bb-cc-dd.
        * PXELINUX: Fix bug involving non-IP-based config file names.
	* SYSLINUX: New installer for WinNT-based systems, from Lars
	  Munch.
	* MEMDISK: Fix handling of memory region overlap when
	  decompressing.  Thanks to Mikhail Kupchik for identifying
	  the problem.

Changes in 2.04:
	* ALL: Reclaim even more low memory by observing that
	  comboot_seg == real_mode_seg is perfectly fine, and by the
	  fact that the 1000h segment managed to get unused in all
	  derivatives...
	* PXELINUX: Attempt to negotiate full Ethernet-sized blocks
	  (1468 bytes) using the blksize option.
	* SYSLINUX: Resurrect the old no-mtools version of the
	  installer, although as a root-only tool.  Some distributors
	  have indicated that they need a small standalone installer.
	* MEMDISK: Fix a memory offset computation error when
	  installing compressed disks which generally would cause
	  1 MB of memory to be wasted.
	* MEMDISK: Fix installing the E820 memory map.  Calling
	  INT 15h AX=0E820h with MEMDISK 2.03 loaded would give a
	  completely corrupt memory map.
	* SYSLINUX: Make libsyslinux a dynamic library, so that it can
	  be updated separately from client programs.  The whole idea,
	  after all, is to enable alternate programs to become
	  syslinux installers.
	* Include an rpm spec file in the distribution, so rpmbuild
	  -ta works.

Changes in 2.03:
	* Actually support comment lines in the configuration file.
	* PXELINUX: Try to resolve some problems with stack switches.
	* PXELINUX: Handle PXE stacks with broken routing.
	  With these workarounds, the remote install PXE boot floppy
	  (rbfg.exe) from Argon Technologies should work correctly.
	* Fix problems with Perl scripts in UTF-8 locales.
	* You probably need NASM 0.98.34 or later to compile this
	  version.  0.98.36 is recommended.
	* MEMDISK: Now supports gzip compressed images.

Changes in 2.02:
	* SYSLINUX: Security flaws have been found in the SYSLINUX
	  installer when running setuid root.  Rewrite the SYSLINUX
	  installer so it uses mtools instead.  It therefore now
	  requires mtools (specifically mcopy and mattrib) to exist on
	  your system, but it will not require root privileges and
	  SHOULD NOT be setuid.

Changes in 2.01:
	* MEMDISK: Fix memory sizing bug when the ramdisk crosses the
	  16 MB boundary.
	* MEMDISK: Add a "pause" option to stop immediately before
	  booting, to read off the messages.
	* MEMDISK: Support disk images with DOSEMU headers.
	* Update the mkdiskimage script to handle newer mtools
	  versions, and be able to generate disk images with DOSEMU
	  headers (controlled by the -d option).
	* Fix the COM32 sample program.
	* PXELINUX, ISOLINUX: Fix some COMBOOT API calls.
	* PXELINUX: Doc fix.
	* Build SYSLINUX into a small library for encapsulation into
	  other programs (however, please keep in mind this is a GPL'd
	  library.)
	* SYSLINUX: Make installer work with "owner" in /etc/fstab.
	* SYSLINUX: Fix issue with working on nonpartitioned hard disk
	  devices.  THIS CONFIGURATION IS NOT RECOMMENDED.

Changes in 2.00:
	* ALL: Add support for "COM32" (32-bit COMBOOT) images.
	* ALL: Add an API for COMBOOT/COM32 images.  See comboot.doc
	  for details.  There is a C development environment for
	  COM32 being created; it should be ready at some point in
	  the future.
	* Fix mbr.asm so that it actually works.
	* SYSLINUX: The syslinux installer *SHOULD* now be safe to
	  run setuid root.
	* PXELINUX: Fix bug where PXELINUX would override random
	  chunks of the UNDI code segment!  Thanks to Kevin Tran for
	  finding this bug.
	* ISOLINUX: Fix a bug related to slashes in pathnames.
	* ISOLINUX: Fix a bug in handling initrds over 128 MB.
	* ALL: Make the <Ctrl-V> key print out the version; this is
	  to help debugging.
	* Add a small script, mkdiskimage, to create a DOS-formatted
	  hard disk image using mtools.  This may be useful in
	  conjunction with MEMDISK.
	* ISOLINUX: Search for a /boot/isolinux directory as well as
	  /isolinux.
	* ALL: Fix a bug related to very long configuration files.
	* PXELINUX: Work around a NASM bug which would result in no
	  delay before reset if an error occurs.

Changes in 1.76:
	* ISOLINUX: Remove code no longer used which caused hangs on
	  some Toshiba laptops.

Changes in 1.75:
	* ALL: NASM 0.98.32 or later is now required to build
	  SYSLINUX from sources.
	* SYSLINUX: put back in the workaround for the BIOS floppy
	  table.  This seems to be a requirement for "extended" floppy
	  formats to work correctly.
	* SYSLINUX: No longer warn if one is trying to boot on a 286
	  or older.  The above BIOS workaround no longer fits if the
	  requirement to use only 8086-compatible code in the early
	  boot is maintained.  It made sense in 1994, but in 2002 a
	  286 or older is a museum object.
	* SYSLINUX: Use a downright bizarre, stateful algorithm to try
	  to guess the maximum transfer size.  I am *hoping* this will
	  cut down on the number of systems for which -s is required
	  to work at any acceptable speed.
	* ISOLINUX: Add a few more workarounds for various broken El
	  Torito BIOSes.
	* Make sure .depend files aren't accidentally packed...
	* ALL: Fix bugs in the extension-detect code; this caused
	  files like COMBOOT images and CD boot sectors to be
	  mis-identified as Linux kernels and rejected.
	* ALL: Fix the return from COMBOOT.
	* ALL: Do some of the early groundwork for supporting DOS
	  system calls in COMBOOT.
	* Get rid of unnecessary "near" directives, making the code
	  bigger.
	* PXELINUX: Put the PXE stack back in the init state before
	  invoking a chain-loaded NBP.
	* PXELINUX: Actually found the combination of calls that
	  allows some (most?) PXE 2+ stacks to be unloaded from memory
	  properly.
	* PXELINUX: Add "keeppxe" command-line option to disable
	  the standard unloading of the PXE stack.

Changes in 1.74:
	* SYSLINUX: fix bug that would cause valid kernel images to be
	  labelled "invalid".

Changes in 1.73:
	* Work on removing gratuitous differences between modules.
	* Break up the source in common and module-specific files.
	* PXELINUX: Allow chaining of other PXE NBPs.
	* ISOLINUX: Allow loading "CD-ROM boot sectors".
	* ALL: generalize the definition of a boot sector/NBP.

Changes in 1.72:
	* PXELINUX, ISOLINUX: Fix bugs in the new core code.

Changes in 1.71:
	* Fix a "brown paper bag" class bug in the new core code.

Changes in 1.70:
	* Major code restructuring.
	* Relax the conventional memory limits somewhat.
	* MEMDISK: Set up the "version number string" pointer in the
	  header correctly.
        * SYSLINUX: Fix, again, "the bug that won't die": the use of
          the offset parameter with the SYSLINUX installer.
	* SYSLINUX: Fix possible superblock corruption problem in the
	  SYSLINUX installer.

Changes in 1.67:
	* Handle bug in the location of initrd.

Changes in 1.66:
	* MEMDISK: Make compile with newer versions of gcc.

Changes in 1.65:
	* ISOLINUX: Support booting disk image files (to boot DOS or
	  other non-Linux operating systems), *IF* the BIOS works
	  correctly; unfortunately many BIOSes apparently don't.
	* Support Linux boot protocol version 2.03 (explicitly
	  specify the initrd address limit.)
	* Handle small "pseudo-kernels"; images that use the Linux
	  kernel boot protocols but are less than 64K in size.
	* MEMDISK: New subsystem; this is a driver which allows
	  legacy OSes to boot using an in-memory simulated disk.
	  See memdisk/memdisk.doc for more info.
	* PXELINUX, ISOLINUX: Correctly handle files larger than 65535
	  blocks (32 MB for PXELINUX, 128 MB for ISOLINUX.)
	* PXELINUX: Make a best-effort attempt at freeing all memory
	  claimed.  From the looks of it, it will fail on most PXE
	  stacks.

Changes in 1.64:
	* Limited support for hardware flow control when using a
	  serial port console.
	* Support specifying the serial port I/O address explicitly.
	* Make DOS installer hopefully behave more nicely when used on
	  recent Windows versions.
	* Fix returning to text mode when a font has been specified.
	* Attempt to detect missing serial port hardware and disable
	  the serial port if there is nothing there.

Changes in 1.63:
	* Make the ppmtolss16 program handle color conversion more
	  correctly.
	* Clean up "make install" target, honour INSTALLROOT if it
	  exists.
	* SYSLINUX: Fix stack-smash bug identified by Steffen
	  Winterfeldt.
	* Hopefully fix return-to-text-mode on some graphics cards.
	* ISOLINUX: Bug workaround for Award BIOS 4.51, and perhaps
	  other buggy BIOSes as well.

Changes in 1.62:
	* PXELINUX: Allow the DHCP server to override the
	  configuration file name and pathname prefix, using
	  "site-specific" DHCP options.
	* PXELINUX: Documentation fixes.
	* PXELINUX: Fix the "ipappend" option; the last two values
	  were reversed vs. what the kernel expected.
	* Introduce a way to return to text mode once we are already
	  in graphics mode.  This may be useful for F-key help
	  screens.
	* Fix several bugs in the way return to text mode was handled.

Changes in 1.61:
	* ISOLINUX: Support full pathname searches.  Max length for a
	  pathname is 255 characters.  As a result, only 64 "label"
	  statements are supported in ISOLINUX.
	* PXELINUX: Max filename length extended to 63 characters.

Changes in 1.60:
	* Add support for graphical splash screens.
	* Add mode control characters, which allows you to control
	  message display output depending on output mode (text,
	  graphics, or serial port.)
	* ISOLINUX: New program, which boots Linux from a CD-ROM
	  without using floppy emulation mode.  See isolinux.doc for
	  more details.
	* PXELINUX: Don't search for boot sector file types, since
	  they don't work anyway.
	* SYSLINUX: Document the LOCK command for Win9x, and the error
	  dialog box for WinNT/2K.

Changes in 1.54:
	* PXELINUX: Fix code for finding !PXE from PXENV+.  This was
	  due to a spec bug; match the most recent spec since that
	  seems to be what implementations actually do.
	* SYSLINUX: Add some smarts to the boot sector, which
	  hopefully should reduce the number of systems which require
	  stupid mode ("syslinux -s").
	* PXELINUX: Document further some of the pathologies with old
	  PXE stacks.
	* When specifying a "default" command line, no longer
	  automatically appent "auto".  See the "DEFAULT" command in
	  syslinux.doc for more information.
	* PXELINUX: Clean up the allocation of local socket numbers.

Changes in 1.53:
	* PXELINUX: Rename pxelinux.bin to pxelinux.0, to match what
	  most PXE servers seem to expect.
	* PXELINUX: Update the DHCP/boot server setup documentation.
	* PXELINUX: Support new "localboot" option for "label"
	  sections.
	* PXELINUX: More robust parsing of DHCP/boot server packets.
	* PXELINUX: Include a small utility program "gethostip" to
	  compute hexadecimal IP addresses.

Changes in 1.52:
	* PXELINUX: Fix bugs introduced by new A20 code.  (SYSLINUX
	  has also been changed for code consistency reasons, but I'm
	  pretty sure the changes are don't care on SYSLINUX.)
	* Documentation updates.
	* PXELINUX: Add "ipappend" option to generate an ip= option to
	  the kernel.

Changes in 1.51:
	* PXELINUX: Not all PXE stacks fill in the IP address for a
	  type 3 cached info query.  Use a type 2 cached info query
	  for this information (only.)
	* Yet another attempt at A20 coding.  Now support BIOS call
	  15:2401 as well, and handle machines which always have A20
	  on separately.
	* Support memory detection using INT 15h, AX=0E820h.  BIOS
	  manufacturers have apparently gotten sloppy about keeping
	  INT 15h, AX=0E801h working properly.
	* Don't issue <CR><LF> onto the serial port when we're doing
	  screen wraparound.

Changes in 1.50:
	* Yet another A20-code update.  It seems some "legacy-free"
	  machines and embedded gear simply don't have a KBC to talk
	  to, and that waiting for one will wait forever.  Sigh.

Changes in 1.49:
	* SYSLINUX: Implement a hack for BIOS drivers which hog significant
	  chunks of low memory during boot.  (Note: PXELINUX already
	  had this modification.  SYSLINUX does still require that the
	  low 512K is available; PXELINUX requires 384K.  Machines
	  with a physical memory hole in the low 640K cannot boot
	  Linux no matter what.)  Depending what the reason is for the
	  memory hole, a new kernel (2.4.0-test3-pre3 or later) may be
	  required.
	* SYSLINUX: Default installer binary now compiled against
	  glibc 2.1.  If this is inappropriate for your system and you
	  still want to use the offical version of SYSLINUX, please
	  follow the instructions in "distrib.doc" to rebuild the
	  installer.
	* SYSLINUX: Linux installer program now supports -o <offset>
	  option which does a loopback mount with the
	  -o loop,offset=<> option.  Useful to run SYSLINUX on an
	  individual partition of a whole-harddisk image.
	* Include the source code to a Master Boot Record (MBR)
	  functionally equivalent to the one installed DOS except it
	  includes EBIOS support, and should be resistant to geometry
	  changes.  The MBR code is public domain.
	* PXELINUX: Fix "double p" bug: if the tftp prefix was null,
	  all filenames would get a "p" preprended, e.g.
	  "ppxelinux.cfg" and "pvmlinux".

Changes in 1.48:
	* PXELINUX: Workaround for PXE ROMs based on the Intel PXE PDK
	  3.0 build 071 and earlier: missing !PXE structure pointer.
	* PXELINUX: Handle larger BOOTP/DHCP packages.
	* PXELINUX: The command line passing was broken; fix.
	* PXELINUX: Make COMBOOT images work.
	* PXELINUX: Documentation on how to make booting work using
	  the PDK 3.0-derived clients, which aren't so generous as to
	  allow booting with only "PXEClient" specified.

Changes in 1.47:
	* PXELINUX: RFC 1123 states that a TFTP implementation MUST
	  use adaptive timeout, "at least an exponential backoff of
          retransmission timeout is necessary."  Implement a very
	  simple exponential backoff for retransmits.
	* PXELINUX: Updated documentation, including pointer to new
	  TFTP server.
	* PXELINUX: When sending ERROR due to bad OACK, use the proper
	  destination port number (why are TFTP port numbers so odd?)
	* PXELINUX: If the boot dies in the middle somewhere,
	  eventually give up and reset the machine (unattended
	  operation.)

Changes in 1.46:
	* New program PXELINUX to do network booting using a
	  PXE-compliant (Pre-Execution Environment) network booting
	  PROM.  See pxelinux.doc for details.

Changes in 1.45:
	* Serial console support.  See syslinux.doc for details.

Changes in 1.44:
	* Change HIGHMEM_MAX to 38000000h to (hopefully) avoid the
	  kernel stepping on it; 3f000000h was apparently a higher
	  limit than the kernel used!

Changes in 1.43:
	* Add sys2ansi.pl script to display the contents of a
	  colorized SYSLINUX file.
	* Changed the io_delay once again, after a report that the
	  old delay port causes hangs on some systems.

Changes in 1.42:
	* Frob the "fast A20 gate" port as well as the keyboard
	  controller; will this help systems with problems?
	* Be even more paranoid about A20, unfortunately even this
	  seems to be not paranoid enough... what I don't understand
	  is that if there is hardware out there *this broken*, how
	  can it run Linux at all?  Report an error message rather
	  than hang forever if A20 is stuck.
	* Include some intermediate files in the distribution, plus
	  provide a "make installer" target for distributors to relink
	  the install programs only.  I would prefer the syslinux boot
	  loader proper to be "binary clean" for debuggablity -- use
	  "make clean ; make installer" to rebuild the installers only.

Changes in 1.41:
	* Don't get confused by directories, volume labels, or VFAT
	  long names.
	* Use INT 15h, AX=0E801h to query memory size before trying
	  INT 15h, AH=88h.  This not only provides more headroom
	  between the kernel and the initrd on large-memory machines,
	  but it appears some recent BIOSes actually have started
	  returning garbage for the AH=88h (older) call.
	* Trust high memory beyond the 15 MB mark if the user has
	  specified it, or if obtained with INT 15h, AH=0E801h (with
	  no memory holes above 1 MB.)

Changes in 1.40:
	* Increase A20M delay and put in a test to avoid problems on
	  certain IBM Thinkpads (thanks to Donnie Barnes of RedHat
	  for vital info on this one.)
	* Support COMBOOT style boot command images.
	* Support chain loading (foreign operating systems, e.g. DOS).
	* Include a new "copybs" DOS utility to copy a boot sector to
	  a file (under Linux, use "dd".)
	* Fix the DOS installer to work for disks over 32 MB.
	* SYSLINUX should now handle disks with more than 65536 tracks.

Changes in 1.37:
	* Fix a bug that caused "label" statements in syslinux.cfg to
	  not be handled properly.
	* Updated the documentation.  Among other things, we now allow
	  up to 128 "label" statements.

Changes in 1.36:
	* Fix for booting old (pre-initrd) kernels.
	* It seems at least some versions of OS/2 doesn't set up all
	  the fields in the superblock correctly.  Account for that.
	* Fix bug that caused boot failure when using the mem= option.

Changes in 1.35:
	* Loading from partitions now should work properly.  (Actually
	  tested, this time.  You should even be able to dd a floppy
	  to a partition and boot from it.)
	* Removed large workaround code for an alleged ancient BIOS
	  bug I have never actually seen.  The -s option should work
	  on those machines, anyway.
	* Support for simple keyboard remappings, same as used by
	  LILO (once again to support localization.)  The program
	  keytab-lilo.pl from the LILO distribution included to
	  generate such maps.
	* Added a "safe, slow and stupid" (-s) option to the
	  installers.  This option will lobotomize the boot sector to
	  hopefully work on even very buggy BIOSes.

Changes in 1.34:
	* Ability to load a VGA font on bootup (for localized Linux
	  distributions.)

Changes in 1.33:
	* Bug fix in the Linux installer.
	* Added a workaround for a bug in certain AMI/Intel BIOSes
	  when booting from CD-ROM.
	* Documentation changes.

Changes in 1.32:
	* FAT16 filesystems are now supported.

Changes in 1.31:
	* Now compiles under Linux, using NASM, rather than using
	  Turbo Assembler under DOS.  See http://www.cryogen.com/Nasm
	  for information about NASM.
	* Linux-hosted SYSLINUX installer, as well as a
	  rewritten DOS installer (now is written in assembler, so we
	  don't need Turbo C.)

Changes in 1.30:
	* Added support for loading bzImage and initrd loading, and made
	  SYSLINUX new-setup-code aware (SYSLINUX 1.30 id=0x31).
	* Added LILO-style kernel labels; see the LABEL and IMPLICIT
	  keywords in README file.
	* Added support for colorization of intro and help screens.
	* The vga= option is now handled correctly.
	* Massive rewrite of large chunks of the code in order to
	  support the first two new features.

Changes in 1.20:
	* Added simple online help at the "boot:" prompt.
	* Removed 2880K image as I no longer have access to such a
	  floppy drive.	 (Donations accepted!!)
	* Decided to distribute the source in a subdirectory rather
	  than in a nested zipfile.

Changes in 1.11:
	* Removed a sanity check which would cause booting to fail on
	  Phoenix BIOS version 4.03.  Apparently this BIOS is buggy.

Changes in 1.10:
	* Added configuration file SYSLINUX.CFG.  This file contains all
	  configurable options, and can be edited from any OS which can
	  access an MS-DOS filesystem; there is no longer a need to run
	  SYSLINUX.EXE except to write the boot sector.
	* Default command line now given by "default" line in config
	  file.
	* LINUXMSG.TXT and BOOTMSG.TXT hard-coded file names replaced by
	  "display" and "prompt" lines in config file.
	* LILO-style option appending now supported ("append" line in
	  config file).
	* Prompt timeout is now supported ("timeout" line in config
	  file).  The timeout is cancelled when anything is typed on the
	  command line.
	* Pressing <ESC> or <Ctrl-C> at the Loading... stage now aborts
	  the kernel loading in progress and returns the user to the
	  boot: prompt.
	* The installer now automatically sets the READONLY flag on
	  LDLINUX.SYS.
	* Added 2880K disk image.

Changes in 1.03:
	* Fixed bug that would prevent booting from double-density
	  floppies and other DOS filesystems with multiple sectors per
	  cluster.
	* Added 720K disk image.
	* Changed default kernel name on disk images to LINUX.

Changes in 1.02:
	* Fixed bug that would garble the command line on recent kernels
	  with more than 4 sectors of setup code (this wasn't really a
	  *bug*; rather, a kernel change broke the code.  Unfortunately
	  the Linux boot interface is still sorely undocumented).
	* Added BOOTMSG.TXT file support (message file which does not
	  force display of the boot prompt).

Changes in 1.01:
	* Fixed bug on some (most?) 386 BIOSes would require two boot
	  attempts.
