****************************************************************************
***                                                                      ***
***       This file explains new features and workarounds for bugs in    ***
***                           our 8051 Tools                             ***
***                                                                      ***
****************************************************************************


***********************
* C51 Compiler V4.00: *
***********************

The new Version of C51 V4.01 is available on our BBS (Filename: C51V401.exe)

1) OPTIMIZE (6) Problem
========================
A 'break' command directly behind a 'for' or 'while' loop is ignored.

Workaround: Use optimize(5) or C51 V4.01 or place any other command behind
            the loop.

Example:  #pragma code debug oe
          unsigned char x1, x2;
          void main (void)  {
            unsigned char x, y;
            x = 3;
            switch (x)  {
              case 1:
                y = 5;
                break;
              case 2:
                for ( y = 0 ; y != 5 ; ++y )  {
                  x += y;
                }
                break;          // missing due to Loop-Inversion !
              case 3:
                y = 8;
                break;
            }
          }



2) Problem with 'sbit on bdata _at_' bases
===========================================
The Linker reports an error when a 'sbit' variable is defined based on a
variable defined with 'bdata _at_'.

Workaround:  Use C51 V4.01 or don't use the '_at_' command.

Example:  int bdata bix _at_ 0x22;
          sbit bit0  = bix ^ 0;
          sbit bit1  = bix ^ 1;
          sbit bit7  = bix ^ 7;
          sbit bit15 = bix ^ 15;

          void main (void)  {

            bix   = 0;
            bit0  = 1;
            bit1  = 1;
            bit7  = 1;
            bit15 = 1;
          }



3) Local idata static forced to overlayable segment
===================================================
Every idata variable is forced to a overlayable segment even when defined
with static.

Workaround: Use a global idata variable (defined outside a function) instead
            of a static local idata variable or use C51 V4.01.

Example:  void test (char *p)  {
            static char idata x1;  // should not be 'idata overlayable'
          }



*******************************
* L51, BL51, and BL51E V3.10: *
*******************************

In some special cases the linker and banked linker reports a very high amount
of idata space in use. The new version of L51 V3.11 is available on the BBS
(filename: L51V311.exe).  If you need the new version of BL51 or BL51E please
call us under 089 465057.



*************************
* DS51 and TS51  V5.20: *
*************************

DS51 and TS51 version 5.20 are not able to display memory specific pointer
in the exe- or watch-window.  The new versions 5.22 are available on our
BBS (filename: DS51V522.EXE and TS51V522).



******************
* Automake V1.0: *
******************

In some special cases is is possible that automake retranslates some source
files endless. Use AMK.EXE V1.1 and C51 V4.01 to solve this problem.  These
files are available on our BBS (filenames: AMKV11.EXE and C51V401.EXE).



****************
* MON51 V1.02: *
****************

By mistake MON51 V1.02 was deliverded with C51 V4.00 which contains minor
bugs.  With the latest Version of MON51 (V1.05) it is also possible to load 
OMF-files containing AutoMake information.  MON51 V1.05 is available on our
BBS (filename: M51V105.EXE).



********************************
* Memory management functions: *
********************************

The malloc function contains a bug which causes a wrong memory allocation
when using malloc and free several times.  The source code of these functions
init_mempool, malloc, calloc, realloc and free are available on our BBS
(filename: ALLOC51.EXE).  Since the libraries also contain these functions
our BBS carries the file LIBRA51.EXE.

