Robios Version History
======================

V6.5 (2006-04-26 TB)
 - Split of RoBIOS and EyeSim into two separate install files
 - Updated library libradio.a for wireless data exchange
   between robot and PC
 - Default wireless modules are serial BlueTooth
 - Reintroduction of RoBIOS versions for RadioMetrix wireless
   modules: rob65em.hex and rob65fm.hex, depending on camera
   model e or f (=current)

V6.4 (2005-11-21 TB)
 - Extended HDT motor description for M5 hardware
 - Variable install path

V6.3 (2005-09-06 TB)
 - Extended Robios for new EyeBot controller M5
 - Bug fix, reading camera image in parallel thread
 - Extended Radio demos and wireless remote control
 - Updated examples

V6.2 (2005-05-11 TB)
 - Extended wireless library for BlueTooth and WLAN modules
 - Added 1200, 2400 Baud to serial functions
 - Added HDTChecker program
 - Added support for M5 hardware

V6.1 (2004-08-02 TB)
 - Fixed timing problem for EyeCam-2 modules
 - New batch file commands (gcc68, etc.) for Linux

V6.0 (2004-05-07 TB)
 - Public release following V5.3
 - New gcc cross-compiler version supplied (3.3.1) for Windows and Linux
   allowing full C/C++ functionality
 - Note consequence: All libraries are now in ELF format
 - New batch files under Windows, allowing same syntax as Linux
 - Bug fix: dynamic memory allocation under multi-tasking
 - Bug fix: A/D converter now switches faster between sensors
 - New EyeSim simulator version 6.0 packages with Windows version
 - Wireless library and Remote application included for Windows version

V5.3 (2003-06-03 SS)
 - Conversion to ELF object files
 - Reviewed asmstubs.c: corrected output and clobber lists, newer gcc version
   really use these
 - Removed -ansi from WARN in Makeincl
 - Added --gap-fill=0 to objcopy in Makeincl.
   srec2bin does not like srecs with gaps
 - New ld scrips for ELF
 - Supplied crt1.s for ELF-like startup
 - exchanged libmy*.a with newlib 1.10 libs
 - moved MAX_IRQ to const.h
 - moved ldfiles to mv/lib for compatibility reasons
 - upload command "ul" has been changed to "dl -u"
   (alternative: "transhex" for download and "transhex -r" for upload

V5.2 (2003-01-14 TB)
 - Corrected OmniVision support; to work with this version, the
   capacitor must be removed from the EyeCam interface board

V5.1 (2002-11-01 TB)
 - Several minor bug fixes
 - This version not released to the public

V5.0 (2002-10-04 TB)
 - Major new release
 - Packed RoBiOS in ROM
 - Packed user programs in ROM
 - Support for new camera modules (7620+6620) in version rob50f.hex
 - Fast camera driver with FIFO for EyeCam (6300) in version rob50f.hex
 - EyeBot can be used without LCD
 - Build-in infrared support, enabled via HDT (use infrared instead of buttons)
 - New srec2bin tool

V4.2 (2001-07-16 TB)
 - Updated remote control for PC/Linux (and /Windows)
 - Changed gray scale data value to 8 bit (0 black .. 255 white)

V4.1 (2000-12-04 TB)
 - Updated RADIOlib
 - Updated Remote-Control for PC (still beta-version)
 - Added support for binary hex-format
 - Allow change of startup-sound and startup-image
   by specifying in hdt

V4.0 (2000-11-24 TB+KS)
 - Support for new EyeBot M4
 - Support for RAM extensions up to 2MB
 - Moved system demos from Robios into separate program slot
 - Rearrangement of directory structure

V3.2 (2000-08-16 PR+TB)
 - Add infrared remote control functionality
 - Change camera indicator
 - Add Linux libraries and radio demon in source code
   and as binaries for wireless communication
 - printing to "stderr" redirected to LCD
 - LCDPrintf now also works with floating point numbers

V3.1 (2000-03-06 PR)
 - Include simulator library in user distribution.
 - EyeCam driver speedup and improvements.
 - Allow the Eyebot to run without a connected LCD panel.
 - Bugfix in OSWritePArCTRL.
 - Correct version number printing on front screen.

V3.0 (2000-02-22 TB+PR)
 - Increased warning levels in all compile scripts.
 - EyeCam CAMInit() now returns 17.
 - Corrected color alignment problems in EyeCam driver.
 - Changed OSSleep() to call OSWait() in non-MT mode.
 - Bugfix and speedup of IPColor2Grey().
 - Kernel is now compiled using GCC 2.95.2 and -O6.  This should make
   it faster.
 - Removed unused header files.  User programs should only include
   "eyebot.h"
 - Made include files C++ friendly and added compile scripts c++68 and
   c++68o.
 - Added function OSSendCharRS232() to be used instead of
   OSSendRS232().
 - Changed prototype of OSSpawn() to use 'void (*code)(void)' not
   'int code'.
 - New makefiles which should work on both Unix and DOS.
 - New and improved system call stubs.  All programs need to be
   recompiled to work with the new version.
 - HDT can now contain battery information.  Currently used to scale
   the battery status on the RoBIOS display.
 - Added functions LCDGetPos(), LCDPrinf(), RADIOGetStatus() and
   LCDCPutGraphic(), OSVersion().
 - Added libc headerfiles to user distribution.
 - Changed prototype of RADIO functions.  Changed char to BYTE and
   return int from all functions.
 - Improved RADIO code.  This includes bugfixes and adding encoding to
   support speed up to 38.400 bps.  The new radio protocol is
   incomatible with older versions.  The current max messages size
   (MSGMAXLEN) is now available.
 - Bugfixes in multitasking code.
 - Default download speed is now 115200 bps.
 - Updated EyeCam driver.
 - Unix remote control should be working.  LCDPutString, PCDPutChar,
   LCDSetPixel, LCDInvertPixel, LCDSetPos LCDLine, LCDArea and
   LCDCSetPixel and all VW* transmit info to remote control.
 - Simulator bugfix: type radiand -> radians.
 - Lot of internal kernel changes.

V2.2  (Sep'99, TB+KS)
- bug fix for OSReschedule in preemptive mode (return to main of no thread)
- change in LCDPutString to interpret \n \a
- elimination of clib from RoBIOS

V2.1  (Sep'99, TB)
- enabled preemptive multitasking
- added camera support for EyeCam CMOS camera
- added functions LCDPutInt, LCDPutHex

V2.0
- added functions for Radio communication
- fixed VWStalled
- adapted to new MK3 board design

V1.9
- not published

V1.8
- OSPutVar() and OSGetVar() are changed again. They use the TPU-emulation RAM instead of the TPU-PRAM.
  Now 10 reset resident variables are available (SAVEVAR0 - SAVEVAR9). Six of them are used by now.
- The Robot-ID is reset-resident now
- new linux makefile
- 100Hz TimerIRQ cleaned up
- Sounddemo is more 'intelligent' now in occupying memory for recording
 
V1.7
- new entries in 'hdt_sem.h'
- names changed from lines and rows to rows and columns
- headerfiles protected against multiple inclusion
- OSPutVar() and OSGetVar() are removed from the user-library because the 'Output Compare'
  TPU-function needs 2 of the 4 used reset resident TPURAM locations and the remaining
  2 locations are used by ROBIOS allready.
- new submenu Hrd/Set/Rmt to change the Robot-ID (temporarily) and the RemoteControl state (reset-resident)
- Robot-ID is displayed in the main menu
- Fresh up of the serial driver:
  buffersizes changed to 128 bytes each
  RTS/CTS is now only used if the user wishes to
  in the case of a bufferoverrun the receiver stops until all buffered chars are read or flushed
  OSCheckIn/Out are changed to report errors (and restart the receiver afterwards, CheckIn)
- all TPU channels are initialised to zero level at startup

V1.6b
- new HDT for biped walker
- caseinsensitive acceptance of 'STARTUP.HEX' for autostart programs added
- fixed bug in vwstalled()
- moved system heap to the heap-area of a userprogram, therefore no heap is available
  for Robios if there is no userprogram loaded (malloc is not longer allowed within Robios)
- multitasking demo removed from Robios (it has used malloc, which is since V1.6b
  forbidden to use within Robios)

V1.6
- bug in VWDriveWait() fixed (OSSleep instead of OSWait in noneMT mode)
- HDT semantic definitions sperated into new file hdt_sem.h 
  added new semantics (servos)
- new HDT for revision 'E' Eyebot-vehicles
- new function VWStalled implemented (virtual bumper)
- new function OSMachineID implemented (unique number for each platform)
- implemented an autostart of an userprogram with the name 'startup.hex' after a reset.
  If there are several 'startup.hex' programs in ROM, the one with the lowest slotnumber
  is started. To avoid this mechanism of starting up a program, any key has to be pressed
  while reseting.  

V1.4c
- fixed severe waitstate bug, ALL waitstates out of the HDT have been set incorrect
  this led to a enormous slowdown of the system (i.e. 10fps instead of 16fps in camdemo)

V1.4b
- new download cmd for unix (by T. Braeunl)
- cosmetic fresh up for multitasking (by T. Lampart)
  - mtmode indicates now also an inactive multitasking (value 255)
  - all MT functions terminate with an errormessage if they are called in singletasking mode
  - all semaphore functions return the actual countervalue
- new PSD semantics defined in hdt.h (by T. Braeunl)
- VWWait() modified to deal with single- AND multitasking
- new OS function OSMTStatus() which returns the actual multitasking mode
- bug in VWDriveCurve() fixed by Birgit Graf (fabs instead of abs)

V1.4a
- bugfix for servo-driver
- readable errormessages included (by Thomas Lampart)
- new function OSMachineName which returns the actual name of the Eyebot (published in HDT)
- new cmd-files to compile hdt-files, no makefiles any longer (by T. Braeunl)
- PSD-driver modified to guarantee a correct measurement directly after a PSDRelease / PSDInit 
  combination  
- speed up of IP_Color2Grey(...)
- freshup of ALL image-processing functions (2 borderpixels omitted, top and borderline cleared)
- The Quickcamdriver is modified to blank all unused pixels (for ip-functions)
- CAMGetColFrame changed to enable 'on the fly' conversion into greyscale images (memory reduction!)
- Camerademo works again (stackspace for local variables was too small)

V1.4 (done by Klaus Schmitt)
- After downloading a user program the real size of the program (without bss-segment) is displayed
  with the programname. This info is saved into the datasegment of each user-program, therefore ALL 
  userprograms have to be recompiled with the new crt0.o to run properly under RoBioS 1.4!!!!
  This info is used to guarantee that only programs smaller than 128KB are saved into the Flashdrive!
- The RoBiOS and HDT are now also serial downloadable and are flashed internally!!!
  Simply download them as normal programs. RoBiOS recognizes them automatically.
  This new type of flashing supports both flashsizes (1 and 4 MBit).
- new function OSMachineSpeed(void) to obtain actual cpu clockrate
- new gcc/gas command files
- The cpu-clockrate is now selectable in 1MHz steps from 16 to 41MHz
  All timing critical sections are changed to cope with the new speeds.
  (sound, ad-conversion, serial-transmission, motors, servos, PSD...)
- To deal with higher busspeeds all waitstates are now freely adjustable in the HDT
- keyboard timing slowed down(cpuspeed adapted!), download-cancel is only tested once per 10 srecords  
- added entry in HDT to assign a unique name to each Eyebot, displayed in the main-menue
- the HDT entry for the motor and the servos are changed from cryptic timervalues to
  readable frequency(motor) and time(servo) values.
- minor bugfixes

V1.3b (packaged by Klaus Schmitt):
- new linux-makefiles, fix for empty HDTs
- preemptive MT implemented by Thomas L.
- added support for 115200 baud transmission via SERIAL2 and SERIAL3
- added support for both serial interfaces of the 16C552 (SERIAL2, SERIAL3)
  (all 3 ports can be used parallel and with different speeds/handshakes)
- added versionnumber to HDT, displayed in Hardware-Menu
- added highlevel drive commands (Straight, Curve, Turn...)
- added Timer-IRQ suport for user-programs, demo in /demos/mini
- added PI-controller to the vw-interface 
- Flashrom waitstates changed from 4 to 3 ws
- maximum adress space expanded from 512KB to 1024KB by assigning CS6 to ADDR19
  (now 1MB RAM can be addressed)
- RoBiOS splitted into 2 parts: USER and SOURCE
  The USER part is all you need to work with RoBiOS and write 
  programs for it.
  The SOURCE part is an extension of the USER part which contains
  all the sources needed to modify RoBiOS itself.
  (Copy the SOUCE part in the same diretory as the USER part!)
- all 'include'-directorys are merged and moved to toplevel 
- the HDT parameters are completely documented now (see HDT file)
- the HDT linking is changed to the correct HDT position ($C1C000)
- the audio-record demo in RoBiOS has changed to avoid overwriting the stack
- after powerup an EYEBOT-titlescreen is displayed
- two new LCD functions are implemented: LCDPutImage, LCDMenuI
- full support of 4Mbit Flashroms:
  - the HDT is at powerup automatically reflashed to the same position as in the 1MBit case
  - a 'flashdrive' is added to the User-Menu to store up to three userprogramms and
    reload them easily
- the graph-library is included in the LCD-functions (LCDLine, LCDArea)
- added new hardware test functions for AD, Digital-IN, Digital-OUT, Parallel-In/Out
- CPU-speed, FLASHROMsize, RAMsize and actual Battery-status
  (HDT-switchable) is displayed in welcome-screen 
- new exit behaviour of USER-programs:
  LCD-contents is preserved, prog-runtime is displayed and
  a KEY has to be pressed to finally leave with a clear LCD  
- serious bug in USER-menue fixed (crash after aborted receive
  and attempt to start this nonexisting program) 
- added new systemfunction: OSMachineType() to inform the user 
- added new macro (labmac.i) to enable systemcalls from assembler
- added batchfiles for easy compiling/assembling without makefile (/cmd)
- added FLASHROMsize autodetection, constant RomSize changed to variable, 
  new constant MinRomSize indicates the needed/reserved space of the 
  FLASHROM for RoBiOS
- added updated motor-driver: conversion-table, parallel calls 
- added updated servo-driver: flexible adjustment(HDT), parallel calls,
  new 'angle'-range 0..255
- added encoder-driver and testroutines 
- added simple bumper detection routines
- added infrared-sensor driver
- added v-omega interface for highlevel motor-functions and position-
  detection, appropriate demo in demos/motor
- minor cosmetic fresh ups and bugfixes


V1.2:
- reserved last 15 entries of vector table for system variables
- added RAMsize autodetection
	constant RamSize changed to eofram variable
- replaced number with semantic in device list
- switched from SUN to Linux development environment,
  default makefiles are now for Linux.
- fixed serious stack init bug
- added scrollable devicelist in hardwartest (now max. 18 groups)
- moved devicetypeslist from hdt.c to dtl.c
- moved hardware testfunctions from main.c to dtl.c
- added semantic strings to HDT and DTL
- added generic testfunction functionality to hardwaretest

V1.1:
- renamed robibin to hex
- cleaned up, especially /mc/demos
- expanded INFO structure in hdts
- added new walker demo
- added function OSReadInLatch
- fixed color cam zoom function
- fixed MOTORDrive (hopefully)
- changed strcmp in librobi to own routine
- improved support for Eyebot Platforms with more ROM/RAM
- moved hdtdata from robios to extra data files (/mc/hdtdata/)
- added libc2 test lib
- added two new minidemos
- added new audio.s, psd_driv.s, serial.s, srec.s, adconv.s
- added new HDT based hardware test under hrd/tst 
- removed set/svo
- fixed CS4 setting for vehicle
- added A/D converter functions
- added outlatch functions
- added PSD sensor support
- added demos/psd
- changed /demos/threads to test preemtive mt
- added functions OSPermit, OSForbid and preemtive MT mode
- added new /demos/impro
- replaced MT demo in main with sema demo
- changed OSSpawn interface, spawn now uses malloc
- added demos/motor
- added more HDT functionality
- added Camera Zoom option
- added HDT skeleton again
- changed KEYGet to KEYGetBuf and added new KEYGet

V1.0: (first offical release)
- added new srec.s
- added new /demos/impro
- waiting on multiple serial support
- removed HDT skeleton again, because completion will take too long

pre4V1.0: (second V1.0 prerelease)
- added serial I/O via fopen,fscanf,fprintf
- fixed bug in OSPutVar
- added first HDT skeleton
- added function OSGetCount()
- prepared everything to support multiple serial interfaces
- added new servo.s
- added new srec.s
- expanded EXECLIB
- reserved Romspace for HDT and added HDTBase definition

pre2V1.0: (first V1.0 prerelease)

- added function OSError(char *,int,BOOL)
- added byte save feature for OSGetVar and OSPutVar
- improved user program handling (Del/Ld with instant abort)
- added /mc/demos/serial
- added new functions OSStartRS232(), OSStopRS232()
- improved CamInit again !
- added new /mc/demos/impro
- improved USRResident, now old binaries don`t cause crashes
	ATTENTION: binary format changed again
- added new srec.s, serial.s
- renamed /mc/demos/threads2 to /mc/demos/sema and added new version
- added /mc/libgraph a graphic lib
- added /mc/demos/graph a small graphic demo
- added /mc/DPROGS a description of all demo programs
- added /mc/demos/mini/etch.c

V0.9: (seventh beta release)
- removed compile option IRPROB, since so many depends on working interrupts
	, timer, multithreading, even downloading.
- added /mc/demos/test for test purpose
- added function USRResident(char *name,BOOL mode)
	now user programs can survive reset
	ATTENTION: binary format has changed !
- added function OSSleep(int n), waits and reschedules
- moved ServoInit from init.s to servo.s
- added new audio.s, now with microphone support
- added adconv.s by K.Schmitt (not yet used)
- removed serial I/O routines from srec.s (actually Klaus did that :)
- added serial.s by K. Schmitt, interrupt driven serial I/O routines
- added /mc/demos/sound by K.Schmitt
- fixed too short camera timeout
- fixed timer bug for boards with IRPROB
- changed LCDMenu again, now only menu entrys that are overwritten are cleared

V0.8: (sixth beta release)
- fixed wrong value in %a5 bug that caused strange hangups
- added new srec.s, now with flowcontrol/noflowcontrol option
- fixed LCDMenu, it now clears the menu line before writing a new one
- fixed scheduler bug, thread2 demo now works correctly
- added new audio.s version, audio is now completely switched of by NOAUDIO
- added uid to tcb structure, access with: OSGetUID(thread)
- fixed diff operator crash
- improved camera init problem (please test)
- added serial handshake setup menu, value also stored in tpupram
- added LCDSetPixel,LCDGetPixel and LCDInvertPixel (who writes a nice graphic lib ??:)
- added funktion OSWait(n), waits n*1/100 seconds
- added startvalue parameter to OSInitSem
- added Thomas Braeunel`s multithreading demo /mc/demos/threads2
- added Thomas Braeunel`s Makefiles for Linux 
- added serial baudrate setting saving to tpupram, so that it survives reset

V0.7: (fifth beta release)
- added /mc/demos/threads a demo on HOWTO do threads
- added /mc/demos/impro a first image processing demo skeleton by B.Linn
- added /mc/demos/walker a first demo skeleton for the 6leged walker by R.Leonhardt
- removed /mc/test
- moved /mc/user to /mc/demos/example
- removed zbar and zfoo
- added clock functions for user programs
- added new srec.s, now with progress report and RTS/CTS handshake
- added servo support by Rainer Leonhardt (servo.s)
  (will only work if your board has a working TPUclk2)
- added cooperative multithreading and semaphores
- added EXECLIB, description of all RoBiOS functions
- added assember system routines descriptions in source files
- moved HOWTO from /mc/user to /mc and added further howto topics

V0.6: (fourth beta release)
- added small HOWTO make your own userprogramm in /mc/user
- moved user/include to librobi/include
- added makefile entry for T.B.`s board
- added nice header to all my sources
- moved running clock from startupscreen to the end of <I> menu
- added stackframe output to Guru Mediation
- added serial port speed selection (default 57600)
- added bidirectional port support for color cam
- added new srec.s version

V0.5: (third beta release)
- object files are no longer provided with this archive
  (a flashable version of RoBiOS can be found under /mc/robibin/robios.hex) 
  (!! this version is for the latest (fully functional) board revision only !!)
- added meta-makefile (doesn`t work under DOS, sorry)
  (you can now do 'make' and 'make clean' in the /mc dir for all subdirs)
- fixed startup problem on older boards 
  (it`s not really a fix, it`s a nasty workaround, I had to switch of all interrupts -> no timer :)
- added sample.s which contains audio samples
- fixed wrong .section directives
- added new audio version 
- added color quickcam support
- added srecord download by Barbara Linn (srec.s), currently only 9600 
	(does not work on some boards)

V0.4: (second beta release)
- added audio support by Klaus Schmitt (audio.s)
- added clock function (only for the bios)
- added first bits of multitasking (very early state)
- added autobrightness for camera
- removed obscure addq #0x02 in all lcd,qcam,ip routines
- added nibble remapping in CAM_GetFrame
- many bugfixes and codechanges in the b/w quickcam code
- release versions will now be called robios[version].tgz

V0.3: (first beta release)
- now hopefully all comments are in english
- added camera detection
- added keyrepeat function


RoBiOS and Eyebot on the net:
=============================
Online documentation and updates:
  http://robotics.ee.uwa.edu.au/eyebot/
Suggestions & Bug reports:
  http://robotics.ee.uwa.edu.au/cgi-bin/bugzilla/
