Softools Development Tools

Home Contact Softools Support
 

Rabbit C Compiler

 
Up
Rabbit WinIDE
Rabbit C Compiler
Rabbit Assembler
Rabbit Support
Rabbit Debugger
Rabbit Download
Order Online
 
Did you know?
Softools' compiler generates 20-30% less code than the Dynamic C compiler which results in much faster programs.
 
And...
Our floating point may not be as fast as Dynamic C's, but it is more accurate.
 
And...
TurboTask provides your Rabbit system with multitasking support in less than 1k of code.
 
And...
Softools' C compiler supports far data and far pointers for access to all of Rabbit 1MB memory in C.
 



 
 
Features
bulletIncludes globally optimizing passes which include more then a dozen improvements to the code, all of which both reduce code size and speed up the program.
bulletControl Cross C is a full Standard C compiler (C90 - partial C99) which also compiles K&R legacy C code.
bulletSCRabbit Control Cross-C generates much less code than Dynamic C and the integer and floating point math libraries are also on par with those tools.
bulletSupports far function calls for unlimited program size. Calls through pointers are also supported for both near and far functions. Modifier _nearcall is provided to specify to the compiler when a far function will be called with a near call (the case when using pointers to functions).
bulletSupports 'far' keyword and far data and pointers for full access to the full Rabbit 1MB address space for both code and data. Automatic conversion from near to far pointers is provided when required. Far pointers are represented as true 24- or 32-bit physical addresses allowing manipulation and far pointer math to map to the hardware address space. C arrays and structs can be declared up to 1MB in size if far. Far char pointers are read using fast inline code.
bulletPasses information to the linker SLINK to ensure each C function doesn't exceed the XPC 8k window.
bulletContains a fully integrated 100% Standard C preprocessor. Directives supported: #asm, #define, #elif, #else, #endasm, #endif, #error, #if, #ifdef, #ifndef, #include, #line, #pragma, and #undef. Also supported are the 'defined' operator and the macros __DATE__, __FILE__, __LINE__, __STDC__, __TIME__, and __SCRABBIT__. The new C99 features are also supported except _pragma.
bulletSupports unlimited memory for compilation, including increased buffer sizes for all aspects of compiling.
bulletDefine preprocessor macros from the command line.
bulletFile search paths and output path may be specified.
bulletMany more warnings for questionable code and more warnings for code which is not ANSI or standard C.
bulletCompletely supports prototypes, and the enum (8 and 16-bit sizes as needed to hold all enum values), const and volatile keywords. Constant folding, strength reduction and operation and register optimizations are automatically done at compile time.
bulletTo generate the fastest and smallest code possible, Softools was extremely careful when choosing instructions and addressing modes in order to generate the fastest and smallest code possible. This includes extensive use of Rabbit 2000/3000 opcodes and addressing modes which allow our Rabbit compiler to generate significantly less code than our Z180 C compiler.
bulletGenerates fully Flash-able and reentrant code.
bulletC language extensions are provided for writing interrupt service routines completely in C and for handling all forms of Rabbit prefixed I/O instructions.
bulletStrings and const objects are located in a ROM segment but can be moved into the code segment.
bulletScalars with initializers of 0 may be grouped in their own segment and zeroed at runtime eliminating wasted bytes of 0 in ROM.
bulletCode and data may be compiled into any pre-defined compiler segment or any user-defined segment at any time.
bulletOptionally generates assembly output optionally including C source code as comments.
bulletGenerates complete source-level debugging information including complete type information for the WinIDE integrated debugger.
bulletHas full support for mixing C and Assembly code. Use either #asm ... #endasm or compiler extension _asm to add assembly code to C functions. #asm... #endasm adds assembly source as-is to the output, and allows conditional directives and #include to customize the assembly code for specific applications. In-line assembly code can use labels and all opcodes and addressing modes available for the selected CPU with Control Cross-C's built in SASM assembler. Or generate one or more lines of assembly code with the built-in compiler extension _asm. With this extension, use C variable names and automatically generate code to load and store the variable, eliminating stack frame details when loading a parameter or local variable.
bulletInline _asm expressions can optionally list registers to be used by the inline assembly code. If any of these registers are used by SCRabbit to store expression values, they will be preserved by SCRabbit. Otherwise, it couldn't know which registers are used by the _asm code and the user's code had to save them whether it was needed or not. Now SCRabbit saves registers you use only when necessary.
bulletA full set of SASMRabbit macros is provided to create C callable functions in assembly. Macros allow the easy loading and storing of both C named parameters and assembly named local variables. A stack frame is automatically created when locals or parameters are used. Automatically saves compiler temporaries in registers before a function call. C and assembly functions never have to save any registers, and only those that are used are saved by the caller.
bulletUses full SASMRabbit assembler allowing support of all SASMRabbit features in C including macros.
bulletThe first (or only) function argument is always passed in registers as well as the stack. A function like toupper( ) can be efficient because the stack frame need not be referenced.
bulletUses specific and fast processor instructions for variable loading and storing, multiplication, division, shifting, bit testing, setting, and clearing.
bulletChar expressions conform to ANSI int promotion rules but only when the result is not a char result. Complete char expressions are not penalized. Warnings about potentially wasteful char promotions to int type are issued allowing you to "fix" code either to use int types or to cast to char to generate better non-promoting code.
bulletThe old style "always use chars" mode can be enabled to generate explicit code for the char data type in that it will not promote to int for expression evaluation and then convert back to char.
bulletEnum can be represented by the smallest size required to do so (unsigned char or int).
bulletThe processor's byte-specific opcodes are used wherever possible, generating smaller and faster code sequences.
bulletThe char type may be set to default to signed char or unsigned char.
bulletLibraries for int, long and float operations are extremely space and time efficient.
bulletAll operations for *, /, %, <<, >>, etc. are computed entirely in processor registers.
bulletSupplied with the following ANSI header files and libraries: assert.h - Contains macros for diagnostics. ctype.h - Contains prototypes for ctype function versions and fast and efficient macro versions of: isalnum(), isalpha(), iscntrl(), isdigit(), isgraph(), islower(), isprint(), ispunct(), isspace(), isupper(), and isxdigit(), toascii(), tolower(), and toupper(). errno.h - Contains macros for error values. float.h - Contains macros for float characteristics. limits.h - Contains macros for integer characterostics. math.h - Contains prototypes for floating point math functions: acos(), asin(), atan(), atan2(), ceil(), cos(), cosh(), exp(), fabs(), floor(), fmod(), frexp(), ldexp(), log(), log10(), modf(), pow(), sin(), sinh(), sqrt(), tan(), and tanh(). stdarg.h - Contains macros for accesing variable argument lists: va_arg, va_end, va_start. stddef.h - Contains macros for standard definitions. stdio.h - Contains prototypes for I/O and formatting functions: _ecvt(), fassign(), _fcvt(), fgetc(), fgets(), _format(), fprintf(), fputc(), fputs(), fread(), fscanf(), fwrite(), _gcvt(), getc(), gets(), printf(), putc(), puts(), scanf(), sprintf(), sscanf(), ungetc(), vfprintf(), vprintf(), and vsprintf(). stdlib.h - Contains prototypes and macros for general functions: abort (), abs(), atexit(), atof(), atoi(), atol(), bsearch(), calloc(), div(), exit(), free(), abs(), ldiv(), malloc(), qsort(), rand(), realloc(), srand(), strtod(), strtol(), strtoul(). setjmp.h - Contains prototypes for the non-local jump functions: setjmp(), and longjmp(). string.h - Contains prototypes for string and memory functions: memchr(), memcmp(), memcpy(), memmove(), memset(), memswap(), strcat(), strchr(), strcmp(), strcoll(), strcpy(), strcspn(), stricmp(), stristr(), strnicmp(), strlen(), strlwr(), strncat(), strncmp(), strncpy(), strpbrk(), strrchr(), strspn(), strstr(), strtok(), and strxfrm(). Additionally, one or more processor specific header files are provided depending on the version of Control Cross-C.
 
 
   
Back Next
 
Copyright © 2005-2023, Softools. All rights reserved.