leJOS NXT 0.2alpha
------------------

- This release is similar to 0.1alpha in that it still runs in RAM under SAMBA. 
- It adds partial support for I2C, Bluetooth, and sound, and greatly improved Motor
  control and navigation.
- The API is substantially revised

Charles Manning has added:

- I2C support (reads only)

Lawrie Griffiths has added:

- Bluetooth support (PC to NXT)
- Sound support (playTone, single volume)
- Native methods for I2C
- Ultrasonic sensor support
- Refactored API and native methods
- new samples (BTRespond, updated View sample etc.)

Roger Glassey has added:

- Improved Motor class
- New Pilot class for steering control
- TextMenu
- new samples

Roger Glassey and Brian Bagnall have added:

- New TachoNavigator class and Navigator interface replacing previous navigators

Brian Bagnall has added:

- javax.microedition.lcdui.Graphics class
- Support for third party I2C sensors (ColorSensor, CompassSensor etc.)
- new samples

Lawrie Griffiths and Brian Bagnall have added:

- Support for Lego Communications Protocol
- Partial support for iCommand (no files)
- Partial support for Bluetooth utilities that work with the standard Lego firmware
  (This includes the Lego Mobile Application)

leJOS NXT 0.1alpha
------------------

- First alpha release for the NXT
- The lejos VM is essentially the same as lejos 3.0 for the RCX
- The code is now held in a subversion repository, not CVS
- This release runs under the SAMBA boot monitor and executes code from RAM
- You must do a long reset on your NXT to go into SAMBA mode
- It makes no use of Flash memory
- The VM and Java binary are downloaded together by the runjava command
- The NXT powers down 5 seconds after finishing a program and the program is lost from memory
- It has been tested on Linux and Windows
- It has no support for Sound or Comms
- The API has changed substantially to support the NXT
- The Motor classes has new methods to support the inbuilt tachometer
- Motor also supports regulated speed control methods: setSpeed, setRegulation, rotate, rotateTo.
- Motor.setSpeed() replaces Motor.setPower()
- There is a class for each sensor, and variant for legacy RCX sensors
- The Sensor class is replaced by a Port class
- SensorListener is replaced by PortListener
- The RCX touch and light sensors are supported, but not the rotation sensor
- RCX motors are supported
- I2C sensors such as the Ultrasonic sensior are not supported

leJOS 3.0.0
-----------

- leJOS supports Lunix kernel 2.6 now
- There has been a major restructuring and refactoring of leJOS' classes
- The single "lejos" command for linking and downloading programs in one step is available again
- The tutorial is part of the leJOS release now (see doc/tutorial)
- The third party libraries have been factored out to a "3rdparty" folder
- There is a folder "check" now that contains a script for checking the distribution after having installed it  

Known compatibility to 2.1.0 issues:
- the Tower() constructor without port argument is no longer supported (for it lead to errors)
- the Tower methods return no longer error codes but throw exceptions in case of an error/exception
- Tower.send(byte[],int) is deprecated now and no longer public

 
leJOS 2.1.0
-----------

  Paul Andrews has added:
  - Activity class in josx.robotics

  Lawrie Griffiths has added:
  - linker changes to remove some unused methods and hence reduce program
    sizes.
  - bug fixes to josx.rcxcomm particularly to RCXPort with serial towers. 
  - a new LNP class that supports a Lego Network Protocol style of API
    including listening on multiple ports.
  - a vision API based on the Java Media Framework similar to the one that
    comes with the Lego Vision Command product.
  - remote execution of Java methods sufficient to support the Vision API.
  - example programs using the Vision API for motion, color and light
    detection and remote method execution.
  - Java versions of the lejos tools, which use the josx.rcxcomm package.

  Matthias Paul Scholz has added:
  - a new remotecontrol package in josx.platform which handles incoming messages from 
    the LEGO remote control or by Maroc (the associated emulator). For details and a 
    description, see http://mp.scholz.bei.t-online.de/lejos.
  - a new example file (RemoteControlTest.java) for this in the examples\remotectl section 
 
  Markus Strickler has added:
  - enhanced support for USB on Mac OS X including josx.rcxcomm
  - fixed Makefile for picking up JNI headers on Linux

  Markus Strickler & Andy Belk have added:
  - fixed Makefiles for Mac OS X 10.2
 
  David Glance has added:
  - Support for USB on Linux


leJOS 2.0
---------

  Paul Andrews has added:
  - Priority inversion avoidance to the thread scheduler.
  - Variable thread stack sizes.
  - Code layout modifications to remove the motor twitching introduced in 1.0.5
  - Various minor code/build tweaks to reduce the size of the VM.
  - Minor fix to the 'lejos' command to enable multiple levels of
    verbosity (syntax -verbos[=<n>]).
  
  Markus Strickler has added:
  - Experimental support for USB on MAC OS X

  Brian Bagnall has added:
  - Modified trig functions in Math class - they are now 10x faster.
    Code donated by Paulo Costa
  - Support for floats in DataInputStream and DataOutputStream

  Lawrie Griffiths has added:
  - Decoupling of ListenerThread from Sensor, Button and Serial, so that these
    classes are not included when they are not used.
  - Low level comms (LLC) that allows single bytes to be sent and received
    over IR, without being limited to the Lego firmware protocol and opcodes
  - A re-implementation of josx.rcxcomm.RCXPort using LLC which is faster 
    and reliable.
  - A similar re-implementation of RCXInputStream and RCXOutputStream.
  - An abstract interface - PacketHandler - for creating your own multi-layer 
    comms protocols.
  - Partial implementations of the LegOS Networking Protocol (LNP) Integrity 
    and Addressing layers using the PacketHandler interface.
  - A re-implementation of the 1.0.5 RCXPort protocol, called RCXF7Port - 
    this uses Serial not LLC on the RCX.
  - An Abstract RCX port interface - RCXAbstractPort - for creating ports using
    any protocol, and implementations: RCXPort, RCXF7Port, RCXLNPPort, and 
    RCXLNPAddrPort.
  - Partial support for point-to-point connections to multiple RCXs using the
    LNP addressing protocol via RCXLNPAddrPort of direct use of the packet 
    handlers.
  - Versions of the SensorReader examples using all the above protocols.
  - A version of javax.servlet.html for writing lejos Web servers.
  - Example servlets including one that sets and reads Sensors via URLs.
  - An Integer class that implements toString(int).
  - Additional String methods and a new StringUtils class.
  - Removal of memory leaks in Button.waitForPressAndRelease and TextLCD.print. 
  - New floatToIntBits and intBitsToFloat native methods to support data streams.
  - Fixes and minor enhancements to josx.rcxcomm.
  - Improvements to apidocs including the inclusion of josx.utils. 

leJOS 1.0.5:
------------

  Brian Bagnall and Lawrie Griffihs have added:
  - the josx.rcxcomm package for stream-based communication between PC and RCX

  Lawrie Griffiths has added:
  - a version of java.net building on josx.rcxcomm

  Brian Bagnall has added:
  - MacOSX support

  Juergen Stuber has added:
  - P1 one remote control now starts program (the one selected by Prgm)
  - added memory regions + 3K extra memory
  - added file TODO
  - Persistent memory
  - writeShort method in Native
  - moved methods from Native to Memory and ROM,
    and from ROM to Battery and MinuteTimer
  - removed Runtime as special class
  - corrected bug in scheduler that could interrupt wrong thread
  - renamed class josx.util.Test to Assertion, method assert to test etc.
    to avoid name clash with JDK 1.4 reserved word assert
  
leJOS 1.0.4:
------------

  Juergen Stuber has added:
  - Serial listeners
  
  Paul Andrews has added (with a lot of help from Martin Nielsen):
  - Number formatting to StringBuffer
  - delete() method to StringBuffer
  - Fixed Math.log() and Math.exp() to handle a much larger range of numbers.

leJOS 1.0.3:
-----------

  Paul Andrews has added:
  - Fixed application download code. Fewer hangs now.
  - Added experimental USB support to firmdl and lejosrun. Set RCXTTY
    to 'usb'.
  - Added progress indicator to lejosrun.
  - Fixed uninitialised variable and boundary condition in
    interpreter that could have prevented task switching.
  - All input listeners now use one thread.
  - Added Proximity Sensor Class
  - Added Servo class
  - Added more accessor methods to sensor and motor classes.
  
  Juergen Stuber has added:
  - LCDConstants.java
  - idle_hook() in interpreter

leJOS 1.0.2:
------------

  Paul Andrews has added:
  - Added Runtime class so that heap size and free memory can be
    returned.
  - Added Object.wait()/notify()
  - Added thread priorities. Scheduler will always run threads
    of a greater priority in preference to those of a lower priority.
  - Added daemon threads.
  - Added ability to interrupt sleeping/waiting threads.
  - Added System.exit().
  - Added a 'Poll' class to monitor changes of sensors and buttons in
    the VM (i.e. a call that blocks until a state change occurs).
  - Changed Sensor and Button listeners to use Poll.
  - Changed Sensor and Button listener threads to be daemon threads.
  - Modified 'View' example to update display whenever a sensor state
    changes rather than only when a button is pressed.
  - Modified native method name mangler so that native methods can
    be overloaded.
  - Added default constructor to StringBuffer so that expressions of the
    form "string1" + "string2" will compile.
  - Added several new exceptions to support all of the above.
  - Added the 'final' keyword to API classes where Java 2 normally has it.
  - Added Test class for performing assertions.
  - Fixed bug in memory allocator that failed to detect a full heap.
  - Added subsumption architcture examples using old and new threading.
  - Added '-n' option to lejosfirmdl so that the JVM size can be checked.
  - Fixed up code to remove warnings when compiling with GCC 3.0.
  - Added instructions on building with CygWin1.3.2 and GCC 3.0.
  - Modified code in several places to reduce footprint.
  - Modified compile options to reduce footprint.
  - Reduced footprint to 16k
  
  Juergen Stuber has added:
  - Fixed rotation sensor mode.
  - Modified main loop to check only one flag for increased speed.
  - Cleaned up hooks.
  - Added performance test to examples.
  - Internal changes to button and sensor listener code to make it smaller.

  Brian Bagnall has added:
  - Behavioural API
  - Navigation API
  
leJOS 1.0.1 (not released separately):
--------------------------------------

  - Fixed bug in java.util.Vector: NoSuchMethodError after 7
    elements added.
  --------------------------------------------------------------
  - Phil Berry has contributed some documentation (see
    docs/phil_berry) and more meaningful trace output
    for emu-lejosrun -v.
  - Hajime Murao reporded a bug in jtoolexec.c. The first
    argument was not initialized properly, which
    means that in some systems (e.g. W2K) you'd see a message 
    saying that lejosc was unable to execute javac or something 
    to that effect, with no apparent reason.

leJOS 1.0.0beta3:
-----------------
 
  - Removed gcc's -O2 option from unix_impl/Makefile, as
    it was crashing gcc 2.95.2.
  - Added Christophe Ponsard's remote control example,
    Ryan Vander Bijl's hworld example, and Reinhard Schiedermeier's
    example on RCX-to-RCX communication (serial2rcx).
  - Added a few methods to the Motor class, based on
    suggestions sent by Rune Berge.
  - Copied the entire util/firmdl directory from legOS 0.2.4
    into tools/firmdl, and made minor modifications to it.
    This should fix the infamous "Permission Denied" bug.
  - The emulation tool was crashing when string constants
    were used, due to a byte ordering problem which is now
    fixed.
  - Considerable performance improvements for certain
    Math functions.
  
leJOS 1.0.0beta2:
-----------------
 
  - Fixed a multi-dimensional array allocation bug.
  - Brian Bagnall's performance improvements for java.lang.Math.
  - Fixed a bug in sqrt.
    
leJOS 1.0.0beta1:
-----------------

  - Multi-program downloading. All programs are linked and
    downloaded in one shot and override previously downloaded 
    programs. Use: lejos Class0,Class1,...
  - Auto power off, but only while in program-download mode.
  - Increased default stack size.
  - Brian Bagnall's latest changes to Math (log, exp, sqrt, and more!)
  - Changed memory allocation and deallocation routines, in preparation
    for upcoming implementation of garbage collection.
  - Max array length is now 511 (was 255).
  - Linker warns about truncated long and double constants.
  - Battery power shown as percentage in program-download mode.
  - This should now work: To kill a running program, hold Run while 
    you press On/Off.
  - Miscellaneous bug fixes (e.g. a js.tinyvm.Sequence bug reported
    by K. E. Elby).

leJOS 1.0.0alpha5:
------------------

  - Significant changes to Sensor API. Sensor.setTypeAndMode()
    should be called before using a Sensor. Sensor.getPercentageValue()
    is no longer there. SensorListener only has one method.
  - Performance of low-level method readSensorValue has
    improved by at least a factor of 6.
  - There is only one global thread that dispatches events to
    SensorListener's, which will also improve performance
    considerably, and may even prevent certain race conditions.
    (Having only one thread for sensor events was once mentioned 
    by Reinhard Schiedermeier).
  - java.lang.Math.atan(double), contributed by Brian Bagnall.
  - Linker checks whether entry class has a main method.
  - Forced persistence across runs was taken out, i.e. all memory 
    is reinitialized every time you rerun a program.
  - Prgm-On/Off does nothing. Run-On/Off kills a running program.
  - Emulation tools have been renamed.
  
leJOS 1.0.0alpha4:
------------------
  
  - Added Brian Bagnall's java.lang.Math class.
  - Fixed bug in the way the linker was writing doubles.
  - Optimized native method calling. About 30% performance
    improvement.
  - Found bugs in handling of stack by some native methods.
    This might have been causing programs to misbehave.

leJOS 1.0.0alpha3:
------------------
  
  - ButtonListener support.
  - Fixed a linker bug: it was dumping a stack trace if
    one of the zip/jar entries in the classpath wasn't found.
    This bug was reported by E. Harshbarger.
  - lejosc and lejosp will work with Java 2 compilers only.
    For JDK 1.1, use lejosc1 and lejosp1. The problem was
    that java.util.Random couldn't be used with Java 2.
    Reported by J. Knudsen.
  - Changed Random(int) to Random(long).
  - Fixed memory leak. Thread stacks were not getting deallocated
    properly on program death.
  - Fixed Makefiles and other things to make leJOS installable
    under Linux.
  
leJOS 1.0.0alpha2:
------------------

  - Distributing CYGWIN1.DLL in the bin directory. 
  
leJOS 1.0.0alpha1:
------------------

  - leJOS is born out of TinyVM. Versions starting
    with 0 are TinyVM versions, whereas versions starting
    with 1 are leJOS versions.
  - Marking references in stack.
  - String constants.
  - Caught up with TinyVM. This is ongoing. Refer to
    TinyVM release notes for 0.1.4 and up.
  - Scripts converted into executables. 
  - Native Thread.sleep() and System.currentTimeMillis().
  - Various other enhancements.

TinyVM 0.1.3:
--------------

  - Found that the hello example did not compile in
    the last version. Fixed it.

  - Decided to make the firmware show battery power 
    whenever it enters program-download mode.

  - Fixed virtual method linker bug. (The linker was
    unable to find certain virtual methods in classfiles
    compiled with JDK1.2.x).

  - Apparently fixed On/Off bug. (The LCD is not cleared 
    by shutdown_buttons in some RCXs).

  - Got rid of TINYVM_HOME.

  - TINYVMPATH is no longer necessary. CLASSPATH is
    used.

  - More appropriate message for linker failure when
    instanceof or checkcast of array classes is 
    encountered.

  - Multi-dimensional array allocation was broken.
    Fixed it.

  - Fixed checkcast bug. (It was not allowing casts of
    null).

  - Footprint report:
    Test13 creates 4238 objects.
    Firmware download count: ~1020

TinyVM 0.1.2:
--------------

  - Fixed serial comm bug. (If you tried to download
    a program to the RCX while another program was
    running, the transferred data could clobber 
    program memory. TinyVM is now shutting down
    serial communications right after a program is
    downloaded).

  - Added a couple dummy classes to satisfy the
    jikes compiler. Users simply have to set JAVAC
    to "jikes". (Jikes is a really fast Java compiler
    by IBM).

  - Changed implementation of Sensor.readSensorValue.
    Reading values from sensors should be more
    efficient now. (I might have to adjust the rotator
    example a bit).

  - Publicized the SensorListener interface and
    Sensor.addListener. It probably still needs to
    be optimized for performance.

  - Added examples to some classes in the API
    documentation.

  - Removed "queued" parameter from most methods in
    Sound. It really didn't make sense to have it 
    in some APIs. Hopefully that won't be much of a 
    problem for anyone.

  - Removed previously deprecated APIs from ROM.
    Again, sorry if this affects you.

  - Fixed MONITORENTER bug. (It was not throwing
    NPE on null monitors - it was crashing instead).

  - TinyVM's linker is now also a loader: The -d
    option will download the program to the RCX.

  - TinyVM's firmware is now listening for the 
    standard "Delete Firmware" opcode (0x65/0x6d).
    Consequently, Prgm-Run On/Off is no longer
    useful, so it has been removed.

  - tvmfirmdl doesn't need an argument now.

  - Added the Serial API and a corresponding example.

  - Footprint report:
    Test13 creates 4262 objects.
    The firmware download count is about 1000.    

TinyVM 0.1.1:
--------------

  - Fixed PUTSTATIC bug. (Setting a static field
    in uninitialized class could produce subsequent
    erroneous behavior).

  - Fixed exceptions bug. (Very critical bug:
    exceptions were not pushed on the stack before
    they were caught).

  - Changed RCX API so that its style conforms
    a bit more with other Java APIs. Namely, 
    depracted routines in ROM, and split them up
    into LCD and Sound, which have more convenient
    APIs. Removed some ROM routines, which hopefully
    haven't been used too much yet. Class Native
    now contains native APIs. ROM contains certain
    unclassified APIs.

  - Added buttons API.

  - Improved the usability of the firmware a bit.
    Basically, you can now press the On/Off button
    to turn off the RCX and kill running programs.

  - To continue on exception "traces" you have to
    press On/Off instead of View.

  - TinyVM has been ported to JDK1.2. This required
    a couple of fixes under jtools.

  - Footprint: Test13 can create 4338 empty objects
    (17352 bytes of allocation space).









