Code Monkey home page Code Monkey logo

huc's Introduction

* 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

1. 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"

2. 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)

3. 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

4. Other enhancements
- support for interrupt handlers implemented in C
- support for more than one input file
- "library" support that includes C files from the include path
- default #include paths
- #incasm directive for seamless inclusion of data files in assembler format
  with user-definable page mapping (useful with SimpleTracker and Squirrel)
- massive reduction of C namespace pollution by assembler libraries; things
  like "int dx;" don't fail anymore...

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
- no support for MinGW (Windows users are recommended to use Cygwin)

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)

huc's People

Contributors

artemiourbina avatar trapexit avatar uli avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.