- This is a work in progress. *
This is a substantially improved version of the HuC PC Engine C development
toolkit. The following features have been added on top of HuC release 3.21:
A. Toolchain features
-
Language support
- ANSI-style function declarations, including return types and function
prototypes (typing is not enforced)
- struct and union support (adapted from SmallC-85)
- anonymous structures and "typedef"
- support for signed and unsigned scalars
- support initialization of
- scalars (global, automatic local, and static local)
- arrays and compound types (constant and variable globals and static
locals)
- constant char pointers with string constants
- type casting (except struct pointers)
- void pointers
- preprocessor features:
- function-like macros (i.e. macros with arguments)
-
if and #elif directives
- macro definition in function bodies
- heap allocator (malloc() / free())
- C++-style comments
- support for function calls in argument lists of fastcall functions (e.g.
"memcpy(a, b, strlen(b) + 1);")
- support declaration of fastcall functions through prototypes instead of
pragmas
- labels and "goto"
-
Performance and code size improvements
- "small stack" and "no recursion" options that cut down code size
and improve performance when these features are not needed
- numerous optimizations of generated code, helper functions, and macros
- reduction of space wasted in partially filled banks (Artemio Urbina)
-
Quality assurance
- automated test suite adapted from snes-sdk and extended to more than 470
test cases; supports verification of screen output
- complete toolchain fixed to work on 64-bit host systems
- tested and fixed for big-endian and 32-bit systems
- fixed to work on Mac OS X (tested on PowerPC) and Cygwin
- more than 70 bugs fixed in various components
- reformatted all assembler files to make them more readable and
maintainable
- many tools had their code formatting made more consistent and have
received uncrustify config files to keep them straight
-
Other enhancements
Among the limitations that still exist and may cause problems:
- no support for initialization of:
- variable pointers
- pointers using array syntax (e.g. "const char *foo = {1, 2, 3};")
- arrays using string constants (e.g. "const char foo[] = "abc";")
- variable arrays with unspecified sizes (e.g. "int foo[] = ...")
- automatic local arrays (static ones work)
- no passing or returning of structures by value (pointers work)
- no type casting to struct pointers
- no floating point support
- no anonymous structs
There are also a couple more absent features that are not so likely to be
missed:
- no local union or struct types (not variables)
- sizeof does not permit dereferencing ("sizeof(*a)")
- no bit fields
B. Included libraries
- HuC PSG driver removed except for initialization routine; it was missing
the part that, you know, makes sounds...
- "SimpleTracker" PSG driver implemented in C
- added SuperGrafx and Arcade Card libraries by Tomaitheous
- more consistent joypad button defines (as provided by the assembler)
C. Tools
- mod2mml implementation derived from Zeograd's unfinished tool that
produces SimpleTracker binary or Squirrel MML files from Protracker MOD
files:
- auto-detection of note length from sample size and pitch
- automated extraction of custom waveforms from samples
- partial auto-detection of volume envelopes
- user-definable mapping of waveform and percussion instruments
- per-instrument transposition and volume control
- MML compiler from Develo CD
- pceas updated to version 3.22
- pceas symbol table rearranged to allow easier sorting by address
- Develo tool ported to Linux (UNTESTED)
NEW:
added 8bpp uncompressed .BMP support