Major changes from 1.0 to 1.1

+ Everywhere: Can compile two versions of the code, under gcc or bcc
(Bruce Evan's cc), so that 16-bit boot PROMs can be made. See
netboot-16/README.16 for more details.

+ Everywhere: Removed duplicate defines, e.g. everybody defined their
own ID for ethernet address size (6). Put IDs for magic numbers in
various places.  Still some inconsistency, ETH_ and ETHER_ are used.

+ Everywhere: Added prototypes of functions to netboot.h.  Removed
unused variables.

+ Makefiles: Rewritten.

+ netboot.h: Added define for TFTP_MAX_PACKET = 512. Increased TIMEOUT
for tftp packets to 180 (about 10 seconds) so that tftp servers would
be able to retransmit blocks.

+ main.c: Rewrote tftp(). Original was intended to get only one block
and the strain on the structure due to modifications was showing.
Increased config_buffer size to TFTP_MAX_PACKET+1 to avoid special
casing data length=512.

+ linuxloader.c: Cleaned up the code in some places, especially
linux_tftp.  Moved the bootp reply block into bss space instead of a
fixed location such as 0x90000.

+ ns8390.c: Removed one bug regarding packet length. packetlen was
wrongly shortened when packets wraparound the ring buffer.

+ 3c509.c: Changed some of the gotos to returns.  Removed ARP code since
that's already done elsewhere.  Removed interrupt enable and Rx early
notification (we can't do anything with the packet until it's complete
anyway).

Major changes from 1.1 to 1.2

+ Small bug in makerom.c. Extra semicolon shortened for loop and made
double checking code invalid.

+ Added version identification to startup string.

+ Gathered external declarations into netboot.h.

+ New compile time option for netboot-32. If INT19H is not defined,
then boot ROM takes control as soon as BIOS scans it. This may solve
the problem of some BIOSes not calling the boot ROM at INT19H. This
may be when disks are detected by the BIOS, i.e. the machine is not
truly diskless.

+ Added a new program, test.c, for making test ROMs to verify that
the BIOS recognises the ROM.

+ New directory contrib contains contributed code. Currently contains
masq by Gerd Knorr: make a boot floppy without DOS
comboot-1.0 by Adam J. Richter: also make a boot floppy without DOS.

+ New mknbi-1.4 from Gero Kuhlmann and Markus Gutschke. This one handles
the new bzImage format.

Bumped up version to 2.0 because we are so listed in the Linux 2.0
distribution and this would avoid confusion.

Major changes from 2.0 to 2.1

+ Added LSM for transname-patch to contrib.

+ Added patch for serial console from Claus Heine
<claus@momo.math.rwth-aachen.de>.

+ Claus Heine contributed patches to the 2.0.21/22 kernel sources to
allow NFS swap.

+ Markus Gutschke provided fixes to start2.S so that main can return to
the ROM code if user doesn't want to ROM boot.

+ Added code to main.c to timeout on the prompt and assume Y or N
for the answer. Timeout and answer configurable.

+ Made NE1/2000 probe addresses configurable from Makefile. Fixed up
autoscan code.

+ Made NFS_BOOT a configurable option. By undefining it, only tagged
file load is supported but ROMs are under 8k.

+ ROMSIZE is not used by makerom now. -s flag controls size of ROM
at runtime.  So don't need to recompile makerom if ROMSIZE changes.

+ Updated netboot-16 for the latest dev tools from the Linux-MT
project. Use the size.c from there.

+ Got rid of _main() in main.c, instead using #ifdef ELF in start2.S.
ELF is preferred now anyway.

+ Changed bcompare to standard bcmp and reversed sense of result.
Reason: to use standard library if available, e.g. Netboot-16.

+ Common Makefile for 32 bit and 16 versions, with differences in
Config files.

Major changes from 2.1 to 2.2

+ New device driver for the Crystal Semiconductor CS89x0 chipset family.
  (because of legal problems, this code is currently in the "contrib"
  directory.)

+ Added support for loading BOOTP extension files (c.f. RFC1533).

+ If we have to go thru a gateway, then use the one that has been used for
  the BOOTP daemon. If the BOOTP daemon is directly accessible, then use
  the first entry in the "gw" gateway list instead.

+ For all retries, back off according to RFC951 by randomizing the timeouts
  and exponentially increasing them until an average of one minute is
  reached.

+ Warn if code will not fit into chosen ROM size. Happens only if the
  autosizing in the Makefile somehow fails.

+ Modified the code for enabling the A20 gate; this could increase
  compatibility, but I still have to hear from users.

+ The copyright message will now reflect, which features have been
  enabled at compile time.

+ Added support for selecting different boot images from a menu. As a side
  effect, this can be used to upgrade the ROM without having to burn a new
  image (c.f. README.VendorTags).

+ Display a "message of the day" that is provided by the BOOTP daemon.

+ The sanity check for detecting a Linux kernel was too strong to properly
  recognize a 2.1.x kernel; this has been fixed.

+ Trys to negotiate for 1432 octect blocks, if the TFTP daemon knows
  about RFC1783.

+ We can optionally boot from local disk, if the BOOTP server cannot
  be contacted.

+ Restructured directories: got rid of netboot-freebsd to reduce confusion
  with Gero Kuhlmann's netboot, moved documentation to doc and renamed
  directories to be more in line with Unix conventions. Edited documentation.

+ Created a dispatch table for NIC routines so that we can include one
  or more drivers in one binary. Renamed all entry points in the driver
  sources. Created two new files, config.c, which holds the dispatch
  table and can be conditionally compiled; and nic.c which contains the
  extern variables referenced by the drivers.

+ Automatically decide what size ROM is needed by doing a size and then
  choosing the correct startup object. Currently caters for 8k, 16k and
  32k ROMs.

+ Optionally include a simple interpreter for ANSI escape sequences. This
  allows for fancier boot menus.

+ Remove patches directory which is mostly relevant to 1.x kernels only.
  Everybody should use 2.x kernels now. If for some reason you need those
  patches, get an older release of etherboot.

+ Fix Makefile to work even if . not on PATH.

+ Sadly, 32 bit ROMs are now > 8kb. We will try to reduce the size by
  conditionals in a later release. For now, use version 2.1 if your NIC
  won't take > 8kb ROMs.

+ Release as 3.0b1 because of the large amount of changes.

+ Fixed a few problems with the code for ANSI escape sequences and
  added optional support for displaying graphics.

+ Optional support for password protected boot images.

+ Optional support for booting from block devices (floppy, hd).

+ The bootp server can pass additional parameters to the loaded kernel
  image (currently, this only  applies to Linux)  and the user can  be
  allowed to edit a commandline; the latter is optionally protected by
  a password scheme.

+ Set the warm-boot flag when the main routine is entered.

+ Release as 3.0b2

+ Added code for updating the FlashCard EPROM over the network
  (contrib/flashimg).

+ Added very simple code for turning a ROM image into a network loadable image.
  This is useful for debugging, but some users without flash EPROMs might
  appreciate the possibility to load a fully fledged image from a very basic
  configuration.

+ Optional support for compressing the ROM images. Please read 
  doc/COPYING.compressor before using this feature.

+ Sync'd our source tree with Gero's netboot-0.5; this means that you now need
  the as86 from the ELKs project in order to recompile all of the files. This
  should not affect normal usage, though.

+ Added "mknbi-blkdev" for booting from local block devices.

+ Fixed some bugs in ppmtoansi.c and bootmenu.c

+ Renamed reference compressor implementation to compressor.exp otherwise
  make tries to use it and it should not be turned on by default.

+ Zero'ing BSS in 16-bit version has to be done to _end, not to A0000
  because it's executing in a segment, not in flat address space in 16
  bit mode.

+ Ken Yap contributed a quick and dirty Perl script for people who use
  netboot to test ELKS.  So far I'm the only one I know of; maybe the
  others are silent. :-(

+ Release as 3.0

Major changes from 3.0 to 3.1

+ 4 versions of etherboot can be built for a NIC: .com for testing and
  .rom for burning into EPROM, and corresponding compressed versions:
  .lzcom and .lzrom.

+ The loaders are now separate programs which are prepended to the
  etherboot binary. This allows them (plain and uncompressing versions) to
  be maintained separately and gives a bit more RAM to the etherboot code.

+ No need to define ROMSIZE in the build. makerom automatically discovers
  the ROM size needed and fills in the size field in the ROM. This
  simplifies the build procedure.

+ 16 bit versions use the same loaders as the 32 bit version. Also fixed
  two bugs in the 16 bit versions: (1) a non-8086 instruction in zloader,
  (2) setting warm-boot flag in main which zapped some code.

+ Fixed a documentation bug on the ANSI escape sequences.

+ Include netboot-0.5.3 distribution from Gero Kuhlmann.

+ Included some contributions from Dickon.Reed@cl.cam.ac.uk: Running
  display of Kbytes loaded, line of delimiters after loading complete,
  a temporary hack to address timing problems with the 3C509, and some
  Makefile cleanup. The first two changes need to be enabled in Config
  with defines.

+ mknbi-blkdev seems to have been left out by Gero Kuhlmann. Add to
  contrib directory. You probably have to make a symlink to it from
  the netboot-0.5.2 directory.

+ Release as 3.1

Major changes from 3.1 to 3.2

+ 16 bit version now can load to extended memory, if it exists. On
  a 8086/8 this will silently fail.

+ Cleaned up interface between main body of code and NIC drivers. No
  global variables referenced in NIC driver, everything is passed
  through a structure. Only the probe function is visible outside,
  pointers to the others are returned in the structure.

+ Implemented autoprobe for 3c503. Also simplifies code at same time.

+ Removed ARP response code in ns8390.c. Don't think we need to respond
  to ARP requests because other machines will do gratuituous ARP when
  boot code sends out bootp request. Are there cases where this is not
  true? Gateways?

+ Added 1 second timeout to routine that clears the keyboard buffer
  in case there is no keyboard.

+ Added a skeleton driver that can be used as a template for new NIC
  drivers.

+ ./lzhuf in Makefile so that it will run even if . is not on path.

+ Fixed comboot to work on 286s also. Won't work yet on 8086/8.

+ Fixed mknbi-blkdev to configure properly under netboot-0.7.

+ Added David Munro's PCI code adapted from Linux. Currently has entries
  for PCI NE2000 clones. Generalised it to probe other PCI cards later on.

+ Moved twiddle() outside NIC driver except where used to provide a delay.

+ Fixed bug in Makefile spotted by Ton Biegstraaten. Should prepend
  ZLOADER to make all.lzcom, not LOADER.

+ Charlie Brady donated a NE2100 (LANCE) card, so Ken Yap wrote a driver
  for it. Should work for other LANCE (7990, etc) based cards with some
  modifications.

+ Markus Gutschke wrote rom-scan, and it is in contrib/.

+ Hack rom-scan.c so that a DOS version can be compiled.

+ Removed all.* targets from Makefile. The NIC specific loaders should be
  used in preference as the all.* loaders can run out of memory.

+ Added a disable routine to dispatch table so that cards can be turned
  off before the loaded code is executed.

+ Make INT19H the default.

+ Rogier Wolff persuaded AW computer systems to contribute the Intel
  EtherExpressPro 100 driver. The binary to hex converter in contrib/
  is also from Rogier Wolff. Part of the work is sponsored by BitWizard
  NL (www.bitwizard.nl).

+ Distribute with a subset of netboot-0.7.2 that doesn't have the bootrom
  portion.

+ Release as 3.2.

Major changes from 3.2 to 4.0

+ Merged in Vlad Lungu's patches for DHCP support, ifdef'ed by DHCP_SUPPORT.

+ XID matching fix also provided by Vlad Lungu.

+ Merged in William Arbaugh's patches to make eepro driver work properly.

+ Add to contrib/ better bin2intelhex from Jean Marc Lacroix.

+ Patches from Jim Hague (thanks!) for the following:

* Added PIO mode for 3c503 to ns8390.c. Changed the card detection to
  detect shared memory or PIO and use the selected one, and removed
  a jumper check that failed on the Bull (no jumpers).

* Added more #ifdefs to ns8390.c to include only code relevant to the
  card being compiled, and removed unnecessary run-time card vendor
  behaviour branches - it's all now #ifdefd.

* Added a -3 parameter to makerom to set the last two bytes to 0x80.
  These are the values they have in the 3Com Etherboot image that was
  in the Bull. (Also on the 3c503 card I have - Ken.) Also altered the
  Makefile to add this parameter when building a 3c503 image.

* Modifies lzhuf.c, objdump86.c & size86.c to work on either-endian systems.

* Adds a -DT503_AUI config paramter to let you choose AUI or BNC on
  3c503s.  Previously it defaulted to AUI, and you had to change the
  code to alter it.

* Changed the BCC include directory to /usr/bcc/include. If you use the
  BCC include files they don't define u_char, u_short etc. I've added
  these into linuxdef.h, ifdef'd on BCC.

* Adds a trivial Linux 3c503 driver patch to the contrib directory
  to let it spot these 'ere Bull things.

+ Charlie Brady confirmed that the Lance driver works with PCI so there
is a new lancepci driver now.

+ Removed support for NFS_BOOT; only TFTP booting supported now.

+ Removed support for linear images; only tagged images supported now.

+ Removed PRIORIZEBOOTPKERNEL and BOOTPKERNELONLY. Bootp reply must
specify kernel name.

+ Bug fix for 16 bit version of 3c509 driver: sign bit propagation bug.

+ Revert to non-pausing versions of out[bw] and inb for NEx000 driver
because of reports of timimg problems on some cards.

+ New driver for NI6510. Just a simple tweak of the lance driver for
different ID bytes and different register offsets. According to the
NI6510 driver in Linux, the NI6510 Etherblaster is more like the NE2100
and would be detected by the NE2100 driver. So use that one instead.

+ New drivers for 3c507 and NI5210, both of which use the i82586 chip. It
works properly for both now. I needed to have enough receive buffers to
make sure i82586 never goes into an out of resources state. 3c507 driver
has one quirk, it only responds after second bootp request. I seem to
remember something about this problem of losing the first packet after
initialisation in early Linux discussions.  I am also now convinced
that Intel designers have weird minds. BTW, NI5210 driver assumes 8k
RAM because if you put the ROM on the NIC you can only have 8k RAM. If
you are putting the ROM off-board and you want 16k, well, talk to me.

+ Call nic_disable routine just before jumping to loaded image. This
does nothing in most drivers, but may have side effects as the nic_reset
routine used to be called instead.

+ One of those "why I didn't think of it before" ideas: A modified version
of comboot, called floppyload, that is prepended to the .rom image rather
than the .com image and then both written raw to a floppy for testing the
bootrom. All we have to do is jump to an entry point in (z)loader that
skips the INT19H stuff. Relocation will happen automatically.  Now the
.com images and comboot are superfluous, unless one is masochistic enough
to want to try to test under DOS.

Added .fd0 targets to Makefile. Saying make <card>.fd0 will make
floppyload.bin and <card>.rom, and cat both to /dev/fd0. Naturally the
drive must be writable and you must have a floppy in the drive.

+ New driver for Tiara (Fujitsu EtherStar). This was one of the easiest
drivers to write. But the chip apparently has some quirks; there is no
Linux driver for it in the standard distribution and the email address
of someone who wrote an alpha driver is invalid. Perhaps I'll bump into
an AT1700 (which has a similar chip) one day and be able to reuse a lot
of the code.

+ Updated contrib/mkelksnbi for ELKS 0.0.68.

+ Confirmed that the SMC8216 driver works. 8416 not tested, it's a PnP
card. Can anybody confirm this?

+ New contributed software: p910nd, a tiny printer daemon suitable for
diskless hosts.

+ Made ANSIESC work for Etherboot/16.

+ Fixed Makefile and Config.* so that it works with old binutils.

+ Included a subset of netboot-0.7.3.

+ Released as version 4.0.

Changes between 4.0 and 4.1

+ Patches by Andrew Coulthurst for eepro100b.

+ Patches by Doug Ambrisko for booting Windows95 after answering N to
the boot from network question. Added conditional code to cope with
broken DHCP server and TAG 128.

+ Put version and driver identifier at end of ROM image if it fits,
to help identify ROMs in future.

+ Capture ROM segment address and length to help choose between multiple
NICs later.

+ Don't clear all of memory because it will destroy return address
on stack.

+ Changes to comboot-1.2 (although obsolete) to run on 8088s.

+ New version 0.2 of p910nd, a non-spooling printer daemon.

+ Patches by Alex Harin to prepended loaders and makerom to generate PnP
ready ROMs. Modified makerom to automatically detect PnP and PCI headers
and do the right thing. Added option to change the vendor and device IDs.

+ Augmented documentation for 2.1 and above kernels. Kernel now wants to
mount /tftpboot/<hostname in bootptab> rather than /tftpboot/<ip address>
as the root FS.

+ Changed all the outb* and outw calls in drivers (except eepro) to be
OUTB* and OUTW, then defined macros to translate to out[bp]* for both
Etherboot/32 and Etherboot/16, instead of pasting macros from Linux
include files because apparently they've changed in 2.1. At the same
time reversed the arguments in start16.S for outb and outw to match the
Linux convention. Unfortunately the out[bw] usage came that way from
FreeBSD. Someday I'll reverse the arguments in the C files properly.
For any new driver writers, you should use the Linux order now.

+ New contributed utility, disnbi for decoding and extracting network
boot images.

+ Martin Atkins contributed mntnbi for mounting DOS NBIs.

+ Peter Dobcsanyi contributed vendor and device IDs for the Netvin
NE2000/PCI clone.

+ adam@mudlist.eorbit.net contributed RARP code as alternative to
BOOTP/DHCP. Activated by RARP_NOT_BOOTP define.

+ Added link to Claus-Justus Heine's NFS swap Web page and updated the
contrib directory.

+ Disabled max packet length check in ns8390.c. Caused spurious Bogus
packet messages in some cases and doesn't seem that useful a sanity
check anyway.

+ Daniel Engstrom contributed a SMC9000 driver.

+ Didier Poirot contributed an Etherpower II (EPIC 100) driver.

+ Added bug fix by Attila Bogar for bootmenu.c and patch to main.c to
remove looping menus on failure. Also code for ARP replies and TFTP
block retransmit (#ifdefed because controversial).

+ Code cleanup of tftp and tftpd also by Attila Bogar.

+ Nathan R. Neulinger fixed a bug with block being declared short instead
of u_short in tftpd.c, which limited transfers to 32k blocks. Fixed
problem with field tu_block being declared as signed short in many
platforms by including fixed version of tftp.h. Fixed tftp also for
good measure.

+ New mini-HOWTO on a "ssh terminal".

+ Andreas Mack pointed out that eepro100 doesn't compile on 2.1 and
2.2 kernels. Removed unnecessary include of bios32.h and reliance on
definition of virt_to_bus in kernel headers in eepro100.c, epic100.c
and lance.c.

+ David Sharp contributed a Tulip driver written for FreeBSD netboot.
Ken Yap ported to Etherboot. Not tested yet because no hardware.

+ Replaced references to arptable[ARP_CLIENT].node to nic->node_addr in
eepro100.c and epic100.c as they should be.

+ Greg Beeley of LightSys Technology Services contributed a 3c905b
driver. Be sure to read the release notes in 3c905b.txt.

+ Gnter Knauf suggested making the prompt strings more generic and to
put a newline after the answer. Beware, N now means Network boot and
not No to network boot.

+ Alex Nemirovsky contributed some patches for BIOSes that use an extended
space at the top of 640k. Also some code for BIOSes that don't implement
BIOS32 correctly or at all.

+ Use PCI extension BIOS header only for PCI cards, all others use legacy
extension BIOS header.

+ Klaus Espenlaub contributed various cleanup patches to the code.  Also
introduced Rainer Bawidamann's code, see next paragraph.

+ Rainer Bawidamann contributed a Realtek 8139 driver.

+ Simplified rules for building .bin files, use -b of as86 so we
don't need ld86 or objdump86 now. But later found that a fixed as86 is
required. So supply preassembled binaries. The keen hackers can get the
fixed tools.

+ Georg Baum contributed a Schneider & Koch G16 driver. Only the
32 bit version works at the moment; even though the 16 bit version
compiles, it won't work because the current code assumes flat memory
addressing. Anybody who needs the 16 bit version should feel free to
fix it.

+ Reduce size of ROM image loaded by floppyboot.bin from 64kB to 32kB
for a slight speedup in loading. None of the images are even 32kB anyway.

+ Updated some of the documents in doc/sgml.

+ Klaus Espenlaub sent in a totally revamped start32.S, using the code16
and code32 directives in recent GNU as (so if this file won't assemble
maybe your as version is not recent enough). Also patches to the menu
handling code.

+ jluke@deakin.edu.au sent in a fix for the WD/SMC8013 long ago which
I finally got around to verifying.

+ start16.o and start32.o are supplied for those people who have problems
compiling start*.S with as/as86.

+ Released as Etherboot-4.2.0
