CGEN (pronounced seejen) is a framework for developing generators of CPU-related tools such as assemblers, disassemblers and simulators. It specifies a description language for describing the architecture and organization of a CPU without reference to any particular application. Additional applications can be written within the framework. CGEN is written in Scheme and can be run under the GNU Guile interpreter. It is placed under a free software license.
A snapshot of the CGEN manual is available as hypertext.
The self-service CGEN Faq-O-Matic pages is available for adding your questions and answers.
If you are not doing active development on CGEN, you should get the latest official release. The FTP server is often very busy, see one of the mirror sites if you're having trouble connecting.
You can access the development source tree a couple of different ways.
cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src login
{enter "anoncvs" as the password}
cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src co cgen
CGEN is maintained by:
If you would like to report a bug in CGEN, please send an email to the mailing list.
Patches must be approved and will be checked into the source tree by the maintainers. All patches must conform to the GNU Coding Standards and be accompanied by a ChangeLog entry. Please send patches to the mailing list.
There are three mailing lists related to CGEN:
CGEN is written in Scheme (and justifiably!). Many folks are new to Scheme and some are new to functional programming. Rather than try to keep an up-to-date collection of references, the Guile home page includes such a resource list already. Many universities teach Scheme as an introductory programming language, so a search on the World Wide Web should turn up lots of tutorial material, if that's what you're looking for.
A couple of excellent books on Scheme are:
CGEN currently requires Guile 1.3.4 or Guile 1.4.1. Work is underway to support Guile 1.6.x. Guile 1.5.x isn't supported, it's a developmental release.
The GCC project reading list contains a good list.