General Information about TIGCC

TIGCC is a C/ASM cross compiler for the TI-89, TI-92 Plus, and V200. It is a complex project created by the following international team:

Xavier Vassor: Original tigcc command shell and linker
Zeljko Juric: The library and the documentation
Kevin Kofler: Improvements to A68k and its integration into TIGCC, as well as to GCC, GNU as, ld-tigcc, tprbuilder and the *nix version of tigcc, author of the pstarter launcher
Current lead maintainer
Sebastian Reichelt:    The integrated environment and further recompilations, main author of the current ld-tigcc linker
Jean Canazzi: Original recompilation of the GCC compiler
Niklas Brunlid: Minor bugfixes and additions to the original linker and tigcc
Philipp Winkler:    Help file conversion


Release Information

Get additional files and updates at the Official TIGCC Site.


About TIGCC

TIGCC is our attempt to make it possible to program in C for the TI-89 and TI-92 Plus. To do this, we originally recompiled a version of GCC-M68k (which was found here) to make it work with the C calling convention used by TI's compiler. Then we wrote a linker to make it produce .89z or .9xz files. And since we also wanted to allow the use of assembly, we programmed it so that you can use the .asm files and compile them with the A68k assembler. Finally we wrote tigcc, a program which will automatically call the necessary programs to compile everything you specify in the command line. This was the first public release of TIGCC.

At that time, Zeljko Juric (i.e. me, because I am writing this documentation) was quite new in TI community (he bought his TI-89 in July 1999). Although he was a good ASM programmer (in Z80 and 80x86 assembler), he found ASM programming on TI calculators a bit unconfortable, so he started searching for a high-level language compiler for TI-89 (TI-Basic was too slow and somewhat limited). Some compilers were written, but they were quite primitive (one of them was usable anyway: Fargo Pascal, which is transformed later in Ultra Pascal). Then he found a first release of TIGCC...

Some testing proved that it produced quite usable code. But there was a complete lack of library functions. There was just one header file named romcalls.h which was partially usable only for "Doors" programming. Implemented romcalls were possible to use only under the "DoorsOS" kernel. As Zeljko was not a follower nor a lover of the "kernel" concept, he started to think how to use romcalls without any kernels. After a bit of researching, he suceeded to construct a rom-calling macro which worked independently of any kernel, by calling TIOS functions directly.

In the meantime, Xavier stopped the development of the still buggy linker for a while; that was why Niklas Brunlid corrected some of the bugs because he needed TIGCC for his project (Prosit). During this period, Zeljko started to research the (almost completely undocumented) TIOS entry points. He discovered that TIOS itself contains many very useful routines which were usually implemented in various external libraries for kernel-based programming. So the natural decision was to make a library of routines, based exclusively on TIOS entries, which would be usable for both kernel-less and kernel-based programming (and to document everything what was found, of course). This was how the TIGCC Library was founded in the beginning of 2000.

After the release of the TIGCC Library, Xavier started to continue developing TIGCC, so integrating the library as an integral part of TIGCC was the next step. This way Zeljko became a member of TIGCC team. He continued to research the dark, deep, and (previously) unknown parts of the operating system to be able to upgrade the library with new routines. So, at the end of March, version 1.5 of the library was released, with a lot of new functions, and also with floating point support (although it had a few bugs at first).

For a long time, TIGCC was just a command line compiler. Sebastian Reichelt started developing a window-based Integrated Environment for TIGCC in April. First versions of it were quite simple, but later some more advanced options were added to it. In the meantime, Zeljko continued researching and developing. Many people pointed out that the lack of "standard" ANSI C library routines like "fopen" etc. was a big disadvantage of TIGCC, so Zeljko decided to implement them in the TIGCC library. The main problem was the impossibility of creating external archives of library routines (the linker did not support them). Then he discovered a black art of cast constructors which allowed implementing these routines in a quite efficient way, using extremely dirty hacks. The main goal was that the routines which were not used in the program would not be part of the final executable in any way, but if the routines were used, they were supposed to be included only once. This behaviour was implemented successfully, so version 2.0 was released. This release included about 300 new functions compared to the previous release!

Finally, Xavier, Sebastian and Zeljko decided to put everything together and stop distributing various part of TIGCC (compiler, linker, library and environment) independently. Instead, starting from release 0.7, TIGCC contained everything packed in one file. The included library was now release 2.2 (which had stable floating point support, established in release 2.1).

The most important recent change was a complete recompilation of GCC using the sources from the official Cygwin site. This recompilation made it possible to work on the compiler again, which was impossible before because the sources were lost. Native floating point support was implemented by Sebastian in November and December, while Zeljko created the appropriate library functions for this.

When Sebastian Reichelt and Kevin Kofler found and patched a working AmigaOS to COFF converter at the Geek Gadgets site, the linker was not needed as a true linker any more, but rather as a converter from the COFF to the TI executable format. Therefore Julien Muchembled contributed a converter of his own, which was much better than the previous link.

For TIGCC 0.95, Sebastian wrote a new linker, ld-tigcc, which, with Kevin's help, changed TIGCC a lot for the better, allowing to optimize any references between object files at link time, and even to merge constants and reorder sections. It also finally made BSS sections in nostub programs possible. More interesting features are still continuously being added to the linker.

After the TIGCC 0.95 release, the last thing missing from TIGCC was a C debugger. This prompted Kevin to work on integrating GDB into Romain Liévin's TiEmu emulator and adding support for it to TIGCC. The most powerful debugging information format supported by GCC and GDB, DWARF 2, was selected for the debugger.

Although the version you are using now has evolved from a lot of different little updates, it is more or less a complete, working product. Changes are still being made, though, and there is still a long way ahead for TIGCC.


Reporting Bugs

There may still be some bugs in the linker, in tigcc, and in the IDE. If you encounter a bug, please use the bug report form on the Official TIGCC Site, or send all the information that is needed to the appropriate team member.


Documenting Unknown Functions

The TIGCC Library still contains a lot of unknown functions. They are defined in unknown.h. For some of them, prototypes are already available; some are even partially documented. Others are completely unknown.

If you have information about one of these functions (also from TI's documentation, but you may not simply copy the information there for copyright reasons), please take the time to document it. The way to do this is very simple, and you will be doing everyone using this library a big favor.

At first, you need the TIGCC source code, available from the TIGCC Website. Set up the documentation system according to the Readme file, and check whether you can update at least the header files by running UpdateInclude.exe.

To document a file, or to change the file's prototype, you simply need to edit the appropriate .hsf file in the unknown.h subfolder of the help system. If you have enough documentation to move it to another header file, simply move the .hsf file to the appropriate folder, and update all links from and to the file. (For links from other files to this one, you will probably want to use a string replacement program to make the conversion automatically.) Then run UpdateInclude.exe on both the new folder and on unknown.h (if it used to be in unknown.h). Now you will be able to view your documentation in a web browser, and test the function with its new prototype.

When you are finished, please simply send the resulting .hsf file to Doc@tigcc.ticalc.org. We prefer compressed files because mail systems sometimes mess up attached text files, but it doesn't really matter a lot.


Credits

These are the people we would like to thank for their contributions to TIGCC:


History

Note: Click here for the history of the library, or here for the history of the IDE.

October ??, 2007: TIGCC v0.96 Beta 9, ld-tigcc v1.07, Library v2.7, IDE v2.94

October 24, 2004: TIGCC v0.95, ld-tigcc v1.06, Library v2.6, IDE v2.92

January 24, 2003: TIGCC v0.94 SP4, Obj2TI v1.01e, Library v2.5 SP4, IDE v2.91

January 13, 2003: TIGCC v0.94 SP3, Obj2TI v1.01e, Library v2.5 SP3, IDE v2.91

January 12, 2003: TIGCC v0.94 SP2, Obj2TI v1.01e, Library v2.5 SP2, IDE v2.91

December 30, 2002: TIGCC v0.94 SP1, Obj2TI v1.01e, Library v2.5 SP1, IDE v2.91

December 21, 2002: TIGCC v0.94, Obj2TI v1.01e, Library v2.5, IDE v2.91

February 3, 2002: TIGCC v0.93, Obj2TI v1.01, Library v2.41, IDE v2.9

November 25, 2001: TIGCC v0.92 SP2, Obj2TI v1.01, Library v2.4 SP1, IDE v2.8 SP4

November 9, 2001: TIGCC v0.92 SP1, Obj2TI v1.01, Library v2.4 SP1, IDE v2.8 SP3

September 29, 2001: TIGCC v0.92, Obj2TI v1.0, Library v2.4 SP1, IDE v2.8 SP2

May 1, 2001: TIGCC v0.91 SP1, Link v1.2, Library v2.4 SP1, IDE v2.8 SP1

March 24, 2001: TIGCC v0.91, Link v1.2, Library v2.4, IDE v2.8

December 18, 2000: TIGCC v0.9, Link v1.2, Library v2.3, IDE v2.71

October 11, 2000: TIGCC v0.8, Link v1.2, Library v2.22, IDE v2.7

June 26, 2000: TIGCC v0.7, Link v1.2, Library v2.0, IDE v2.6

April 6, 2000: TIGCC v0.65, Link v1.1, Library v1.5

Februar 5, 2000: TIGCC v0.6, Link v1.1, Library v1.1

September 26, 1999: TIGCC v0.51, Link v1.01

July 16, 1999: TIGCC v0.5, Link v1.0


Disclaimer

Original files Copyright (C) 1999-2005 Xavier Vassor, Niklas Brunlid, and Jean Canazzi
ld-tigcc Copyright (C) 2002-2008 Sebastian Reichelt and Kevin Kofler
Library & Documentation Copyright (C) 2000-2007 Zeljko Juric and contributors
IDE Copyright (C) 2000-2007 Sebastian Reichelt and contributors
TIGCC Tools Suite Copyright (C) 2000-2004 Thomas Nussbaumer (TI-Chess Team)

Included programs with different licenses:
A68k Copyright (C) 1987-2005 Charlie Gibbs, David Ellsworth, Kevin Kofler, Julien Muchembled, and Paul Froissart

Some parts of the TIGCC package are parts of the GNU C compiler package. Like the rest of TIGCC, these parts are free software; you can redistribute them and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


Return to the main index