General Information about TIGCC


  
TIGCC is a C/ASM cross compiler for the TI-89 and TI-92 Plus. The current release is 0.9 beta. It is a complex project created by the following international team:

Xavier Vassor: tigcc.exe command shell and the linker
Niklas Brunlid: Minor bugfixes and additions to the linker and tigcc.exe
Jean Canazzi: Recompilation of the GCC compiler
Zeljko Juric: The library and the documentation
Sebastian Reichelt:    The integrated environment and further recompilations
Philipp Winkler:    Help file conversion



Release Information

Get additional files and updates at ticalc.org.

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.exe, 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 and does 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 a part of the final executable in any way, but if the routines were used, they were supposed to be included only once. Such behavior 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 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.

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.

Restrictions

There are still some restrictions, since it is only a beta:

Bug Reports

There may still be some bugs in the linker, in tigcc.exe, and in the IDE. If you encounter a bug in the linker, please send an email to Xavier Vassor. You absolutely have to include the source code and/or the object file(s) which caused the bug to appear, otherwise the bug cannot be found and fixed. For the IDE, please include the files as well if it is not a general problem, but send the email to Sebastian Reichelt instead.

History

NOTE: Click here for the history of the library.

December 18, 2000: TIGCC v0.9 Beta, Link v1.2, Library v2.23, IDE v2.71 October 11, 2000: TIGCC v0.8 Beta, Link v1.2, Library v2.22, IDE v2.7 June 26, 2000: TIGCC v0.7 Beta, Link v1.2, Library v2.0, IDE v2.6 April 6, 2000: TIGCC v0.65 Beta, Link v1.1, Library v1.5 Februar 5, 2000: TIGCC v0.6 Beta, Link v1.1, Library v1.1 September 26, 1999: TIGCC v0.51 Beta, Link v1.01 July 16, 1999: TIGCC v0.5 Beta, Link v1.0

Disclaimer

Copyright (C) 1999-2000 by Xavier VASSOR, Niklas Brunlid and Jean Canazzi
Library (C) 2000 by Zeljko Juric
IDE (C) 2000 by Sebastian Reichelt

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