*****************************************************************
   README for Dynamic C Version 10.21
*****************************************************************

-- RCM43xx and RCM4020 Support

   The RCM4300 and the RCM4020 are the first Rabbit Core Modules
   (RCM) to support addressable memory beyond 1 megabyte utilizing
   the Rabbit 4000 microprocessor's extended memory capabilities.
   The software to support the new larger memories is included
   in Dynamic C version 10.21.

   The RCM4310, also supported with Dynamic C 10.21,
   is a scaled-down version of the RCM4300 with a
   total of 1MB of RAM.

-- RCM4300 SD flash support

   Dynamic C now contains a driver for supporting SD flash.  This
   driver is also supported by the FAT File System module that is
   sold separately.

-- RCM4510W Improvements

   The Zigbee support of the RCM4510W is improved so that incoming
   messages are queued in a buffer pool and removes some
   of the calling restrictions within cluster functions and the
   general message handler.  See Samples\Zigbee\README_ZIGBEE.TXT
   for more information on Zigbee.

   IMPORTANT: Dynamic C 10.21 supports the updated FCC approved
   Xbee Series 2 radios.  If you have upgraded to Dynamic C 10.21
   and have preview hardware, you must upgrade the firmware to
   version 1x21 for both the Digi Xbee USB and the RCM4510W Xbee
   radios.  To upgrade firmware on the Digi Xbee USB, use the
   X-CTU utility.  To upgrade the firmware on the RCM4510W,
   please see Samples\RCM4510W\ModemFWLoad.c.  Please refer
   to Technical Note 256 for specific instructions.

-- Flash selection options

   The Dynamic C IDE now lets you specify an additional program
   flash type: 8-bit serial flash. By default the IDE is configured
   to automatically detect among 8-bit parallel, 16-bit parallel,
   and 8-bit serial program flash. This adds some delay to the
   compile/download/execute cycle, and therefore if you wish to
   circumvent detection you may specify the program flash type
   directly through the "Options->Project Options" menu item in
   the "Compiler" tab.

-- Software updates for the larger memories

   In order to support larger memories, some changes to the
   Dynamic C environment were necessary. Primarily, the changes
   are in two places:

   - The \LIB directory now contains 2 separate directories,
     Rabbit2000_3000 and Rabbit4000. Each directory contains
     the same structure that \LIB used to, but the libraries
     have been updated for the Rabbit 4000 processor in the
     \Lib\Rabbit4000 directory.  Note that Dynamic C 10.21
     only supports Rabbit 4000 based products.

   - Memory mapping. Memory is mapped in Dynamic C using the
     "origin" mechanism. The mechanism has been updated to be
     easier to use and is now more effective at identifying
     collisions and producing useful error messages.

     All memory mapping directives are now located in a file
     called "memory_layout.lib" instead of the BIOS.

     Documentation for the new mechanism is forthcoming in the
     Rabbit 4000 Microprocessor Designer's manual.  Please
     check the Rabbit Semiconductor website for updates.

-- Far data and the Xmem API

   Products based on the Rabbit 2000 and 3000 processors utilized
   xmem through the xalloc function. Access to xmem was provided
   through a user API (xmem2root, root2xmem, xgetint, etc...).

   The xmem API is still needed for the Rabbit 2000 and 3000
   processors, but the Rabbit 4000 (with DC 10.xx) now supports
   the "far" qualifier, which is easier to use and more efficient.

   Far data is backward-compatible with the xmem API (with casts
   of longs to far pointers), but it is recommended that far data
   be used for any new development, and any xmem functions should
   be updated to use the far variants ("_f_" prefix) instead.
   Examples:

   - _f_memset instead of xmemset
   - _f_memcpy instead of xmem2xmem
   - For simple variables, direct assignment from far data to
     root data is possible, as is assignment from root to far
   - For root2xmem and xmem2root, use _f_memcpy and call PADDR
     on the root address, as in:
      _f_memcpy(PADDR(root_var), far_var, len)

-- Character assembly during break

   The RS232_NOCHARASSYINBRK macro now works for STDIO_DEBUG_SERIAL mode
   (part of the STDIO.LIB library).  This suppresses the generation of
   multiple null characters when no cable is attached and the RX pin is
   not pulled up.  It is now the default when STDIO_DEBUG_SERIAL is
   defined to SADR, but must still be explicitly defined for other ports,
   or when using RS232.LIB.  (Pin PC7/RXA is pulled up on Rabbit 2000 and
   3000 core modules, suppressing null character generation. Rabbit 4000
   core modules do not pull up PC7/RXA.  RS232_NOCHARASSYINBRK allows one
   null character to be generated.)

-- WiFi fixes and enhancements
   The wifi_ioctl() API function has slightly different semantics for some
   commands.  In particular, many of the commands require that the WiFi
   network interface is brought down before the command is accepted.  See the
   function help (Ctrl-H) for wifi_ioctl() for details.  Application code
   should ensure that the return code from wifi_ioctl() is checked after
   each call.

   In particular, note that you must bring the interface down using the
   ifdown() function before beginning a Wi-Fi scan.  The interface should be
   kept down while the scan is being performed.  Once the scan has been
   completed, then the interface can be brought back up with ifup().  See
   the samples wifiscan.c and wifiscanassociate.c in Samples\WiFi\ for
   demonstrations of how a scan is performed.

   WiFi Protected Access (WPA), with Pre-Shared Key (PSK), is now available
   for applications which require robust privacy and integrity.  In order to
   use WPA/PSK, simply define WIFI_USE_WPA plus a suitable ascii passphrase
   or hexadecimal key, and define _WIFI_WEP_FLAG to WIFICONF_WEP_TKIP.  See
   samples\rcm4400w\tcpip\pingled_wpa_psk.c for more details.  More
   documentation on the relevant macros may be found through typing Ctrl-H
   on the macro TCPCONFIG in a Dynamic C editor window.

   In order to be acceptable to various countries' regulatory authorities,
   there is an improved API for customizing the WiFi library to conform to
   the radio regulations.  The wifi_ioctl() API function has new commands to
   query and set the channel list and transmit power.  The commands are
   WIFI_MULTI_DOMAIN which allows automatic configuration via 802.11d capable
   access points; WIFI_COUNTRY_SET which allows one of several known
   regulatory domains to be configured; WIFI_COUNTRY_GET which queries the
   current regulatory domain information.



-- Known Issues.

1. Debugger issues

-  In Separate Instruction and Data mode, stack corruption and loss of
   target communications can be caused by complex watch expressions that
   include parenthesized subexpressions, or have expressions as function
   parameters.  This applies to expressions in the watch window, flyover
   evaluations, and expression evaluations.  This may also result in
   multiple "Target communication error" dialog boxes being displayed.

-  Watches, flyovers, and expression evaluations may display garbage for
   constant data.  This occurs with far constants and constants in
   Separate Instruction and Data Space mode.  Possible workarounds include
   copying the data to an (empty) near buffer (example; _f_memcpy(nearbuf,
   farcharptr, _f_strlen(farcharptr)) ), or setting a far pointer to
   the physical address of the data (example: the separate I and D data
   address (const char *) 0x00B6 becomes (far char *) 0x100B6).

-  When debugging a program using either F7 or F8 into or over a
   call to kbhit() will cause the debug cursor to disappear. Pressing
   F7 or F8 two more times will make the debug cursor reappear
   following the kbhit() call.

-  The breakpoint highlight for the closing brace of a function
   does not display correctly if the brace is not in the first column
   of the editor window.

-  The debugger currently only supports 128 breakpoints.  Setting more than
   128 breakpoints will result in the loss of target communications.

-  The debugger does not support assembly language single stepping
   over function calls that do not return to the instruction following
   the call such as "_switch". Any attempt to do so will result in
   loss of target communication. Stepping _into_ the function in
   assembly is supported, as is stepping over such functions in C.

-  If an ipset or ipres instruction is followed immediately by an rst 0x28,
   the debug kernel will not step over the rst 0x28 correctly, but will end up
   in an unexpected location.  When either of these instructions are followed
   by instructions other than rst 0x28, the debug kernel behaves correctly.

2. Software modules.

   RabbitWeb gives a cryptic error message for buffer overflow when
   using the print_select() statement.  The workaround is to make
   HTTP_MAXBUFFER large enough to hold all of the OPTION statements
   generated by the print_select() statement.


3. Software module installation.

   The \LIB directory structure has been changed. It is now divided
   into 2 separate directories (Rabbit2000_3000 for older products,
   Rabbit4000 for all 4000-based products). If you want to install
   a software module that you own, you will have to move the libraries
   into the Lib\Rabbit4000\<your module> directory by hand.


4. Execution tracing feature removed

   The execution tracing feature is no longer supported.  If this feature
   is important to your development please contact Rabbit Tech Support.

5. Ad-hoc (IBSS) Mode and the RCM4400W

   Preview RCM4400W core modules often initially fail to broadcast beacons
   in ad-hoc (IBSS) mode. This prevents these boards from showing up on
   scans after starting ad-hoc mode, sometimes for several minutes.  If
   ad-hoc mode is important to your development, please contact Rabbit
   Tech Support.

6. Sizeof bug with "far"

   Taking the size of the type with the far keyword does not compile
   (e.g., sizeof(far char *)).  The work-around is to take the size
   of the actual variable (e.g., sizeof(p)).

7. Complex casts

   The compiler will not accept multidimensional array types or
   derivatives thereof as cast expressions, even if the cast expression
   is a typedef name. Use a union to work around this problem.

8. Advanced 16-bit memory mode CPU bug

   The Rabbit 4000 CPU's advanced 16-bit memory mode has a defect
   which affects ioe instructions (auxiliary I/O, external I/O)
   and self-timed chip select.  The Dynamic C BIOS has been
   updated to work around this ioe defect on affected boards, all
   of the RCM40xx family.  If absolute top performance is required
   and the User is certain their application is unaffected by the
   ioe bug, the work around can be disabled by adding the
   __ALLOW_16BIT_AUXIO_DEFECT macro into Dynamic C's Project
   Options Defines Box.  See the Rabbit 4000 Users Manual Appendix
   B (errata section) or TN255 for complete details.

9. Error logging not supported

   Error logging is not supported in Dynamic C 10.21.  If this feature
   is important to your application, please contact Rabbit Tech
   Support.

10. In separate I/D mode, if an array is declared as

    far char bar[] = {0,1,2,3,...};

    will not compile correctly when the size of the array exceeds the
    size of the root constant space and will give an error that the
    '}' character is missing. The work-around is to specify the size
    of the array as follows:

    far char bar[32000] = {0,1,2,3,...};

11. Highlighting a block of text while in Stop mode

   In some cases, depending on the specific text, highlighting a block of text
   can result in a flyover watch which returns a copy of that text in the hint
   window.

12. Dynamic C source code maximum line length exception.

    Attempting to compile a program containing a 252-character line containing
    a single printf("long string literal . . ."); call demonstrates an
    exception to Dynamic C's documented line length limit of parsing at most a
    512 character line.