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:
|Zeljko Juric:||The library and the documentation|
|Kevin Kofler:||Improvements to A68k and its integration into TIGCC, as well as to GCC,
Current lead maintainer
|Sebastian Reichelt:||The integrated environment and further recompilations, main author of the current
|Jean Canazzi:||Original recompilation of the GCC compiler|
|Niklas Brunlid:||Minor bugfixes and additions to the original linker and
|Philipp Winkler:||Help file conversion|
A68k v2.71.F3w by Charlie Gibbs, David Ellsworth, Kevin Kofler, Julien Muchembled, and Paul Froissart
ld-tigcc v1.08 by Sebastian Reichelt and Kevin Kofler
TIGCC Library v2.7 by Zeljko Juric
TIGCC IDE v2.94 and Windows Command Line Executable by Sebastian Reichelt
Parameter passing by register Copyright (C) 1998-2003 Fred Fish from Geek Gadgets; converted to GCC 3.0-4.1 by Kevin Kofler
A slightly more advanced GCC patch was originally made by François Revol (mmu_man).
Get additional files and updates at the Official TIGCC Site.
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
.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
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.
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.
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
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
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.)
UpdateInclude.exe on both the new folder and on
unknown.h (if it used to be in
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
We prefer compressed files because mail systems sometimes mess up attached
text files, but it doesn't really matter a lot.
These are the people we would like to thank for their contributions to TIGCC:
François Revol, for his help on GCC-related issues
Peter J. Rowe, for correcting grammar and spelling mistakes in a large part of the documentation
Gereon Kindler, for the title and wizard images and the new icons in the IDE
Olivier Armand, for an improved internal Line 1111 emulator
Ephyx, for the IDE code completion patches and other IDE improvements
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
Added: A new installer for the Win32 release, based on NSIS.
Updated: Many documentation and library updates, see the TIGCCLIB history for details.
Added: A completely new ExePack (PPG) launcher, with an almost halved size.
Added: Support for reordering of startup sections (sharing the same startup number) in the linker.
Added: Support for debugging information in DWARF 2 format (to be used with a GDB-enabled TiEmu), including some toolchain bugfixes required to support this feature.
Added: Support for the new _nostub comment specification 1.01 and its new COMMENT_AUTHORS entry.
Updated: Patched GCC 4.1.2 (prerelease) and GNU as 2.16.1 with the TIGCC patch.
Bugfix: References in assembly code with an explicitly-coded size are now marked unoptimizable in order to make the linker honor the explicit size as well, not just the assembler.
tprbuilder doesn't crash on long
tigcc.exe command lines
under Windows 9x/Me anymore.
ld-tigcc doesn't try to range-cut in files compiled without range-cutting
support (in programs containing files compiled both with and without range-cutting support)
Bugfix: Removing unused sections in
ld-tigcc now really removes all unused
Bugfix: Uninitialized static or global variables are now always emitted to the expected section by GCC.
Updated: Bugfixes and improvements to external data variable support.
Bugfix: Fixed a segfault during constant-merging in
Bugfix: Fixed invalid kernel ROM_CALL or RAM_CALL tables emitted by
unused section removal optimized all ROM or RAM_CALLs away.
A68k doesn't crash on EQUs doing arithmetic with other EQUs which do
arithmetic with undefined symbols anymore, this invalid code now gives a proper error message.
-v0 being limited to 255 characters in the
Windows command-line compiler.
Added: The command-line compiler now supports
Bugfix: Fixed compilation problems on *BSD and Mac OS X.
Added: The standalone version of
ld-tigcc supports a new
--outputbin-main-only switch to be used by KTIGCC.
Updated: ExePack compression support is now Free Software.
Updated: On Windows,
MSVCRT.DLL is now required. This DLL comes with all Windows
versions since Windows 95 OSR 2. For the original Windows 95, it is usually installed by Internet
Explorer or Microsoft Office.
Bugfix: Fixed *nix install script not to attempt symlinking
OS.h on case-insensitive file systems.
Bugfix: Fixed external data variable support for compressed programs in the *nix command-line compiler.
Bugfix: Fixed multiple uses of -Wa or -WA in the *nix command-line compiler.
Updated: The IDE now supports TiEmu (20061030 or later) instead of VTI for debugging/testing.
October 24, 2004: TIGCC v0.95, ld-tigcc v1.06, Library v2.6, IDE v2.92
Added: Support for dynamic BSS sections in nostub mode.
Added: Linker-side code optimization.
Added: Support for data variables.
Added: Support for contructors and destructors.
Added: Experimental optional Fargo II support.
Updated: Patched GCC 3.3.1 with the TIGCC patch.
Updated: Updated PPG launcher created by the TI-Chess Team.
Added: Basic TI-89 Titanium support.
January 24, 2003: TIGCC v0.94 SP4, Obj2TI v1.01e, Library v2.5 SP4, IDE v2.91
Bugfix: Fixed ER_throw bug with 4-digit error numbers.
Bugfix: Removed the rejection of a minimum AMS version of 2.07.
January 13, 2003: TIGCC v0.94 SP3, Obj2TI v1.01e, Library v2.5 SP3, IDE v2.91
Bugfix: Incorporated a fix for fclose.
January 12, 2003: TIGCC v0.94 SP2, Obj2TI v1.01e, Library v2.5 SP2, IDE v2.91
Bugfix: Changed import_binary to export the symbol, and changed the IDE to make it work with it.
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
Updated: Patched GCC 3.2.1 with the TIGCC patch, with a lot of modifications.
Updated: Greatly changed the internal structure of the library.
Added: Applied a patch for argument passing through registers.
Added: Implemented F-Line ROM Calls.
Added: Implemented support for PreOS libraries in
Bugfix: Repaired the '-freg-relative-reg' option.
Updated: Created an option to ignore system folders in the setup program.
Added: Finally wrote a program to update the version numbers in all places.
Updated: Enhanced the help file tools to generate the header files as well.
Added: Added tools to edit the help system files.
Added: Implemented HTML checking for help system files.
Added: Added a switch to
tigcc to create archives.
tigcc look for archives in the
'Lib' subfolder of the installation.
Updated: Repaired some bugs to support debugging switches like '-ggdb'.
Updated: Compressed setup program using UPX.
Added: Added "See Also" links to the help system.
Added: Extracted all examples from the documentation, with a lot of help from Joel Thompson.
Added: Added support for nostub libraries.
Added: Added missing
long long operator support.
February 3, 2002: TIGCC v0.93, Obj2TI v1.01, Library v2.41, IDE v2.9
Updated: A lot of updates in the IDE.
Updated: Completely redesigned the documentation.
Updated: Peter J. Rowe corrected grammar and spelling mistakes in a large part of the doc.
Added: Allowed the use of paths for files compiled with
Bugfix: Fixed a problem with linking multiple A68k files.
Added: Added the '-WA,...' option to pass switches to
Bugfix: Used an updated version of the ExePack launcher by Thomas Nussbaumer, with fixes contributed by Olivier Armand and Kevin Kofler.
Bugfix: Small fixes in the GNU and A68k assemblers.
Updated: Changed the setup program to only overwrite the files that were really changed.
November 25, 2001: TIGCC v0.92 SP2, Obj2TI v1.01, Library v2.4 SP1, IDE v2.8 SP4
Updated: Applied the TIGCC patch to GCC 3.0.2.
Bugfix: Fixed a bug which made uninitialized global variables slower and larger.
Added: Automated the setup creation process to shorten release cycles.
Updated: Detected Windows NT in setup.
November 9, 2001: TIGCC v0.92 SP1, Obj2TI v1.01, Library v2.4 SP1, IDE v2.8 SP3
Bugfix: Fixed the problem in obj2ti with uninitialized global variables in kernel mode.
Bugfix: Fixed the A68k integration problem (in objcopy) which prevented RAM calls from being used in 16-bit addressing mode.
Bugfix: Fixed the IDE bug which made closing large files really slow.
Added: In the IDE, it is now possible to switch between files quickly using
Updated: The program decompressor is stored as an object file now, instead of an assembly file; this removes the need to run the assembler for compression.
Updated: Greatly updated the setup program to prevent legal problems.
September 29, 2001: TIGCC v0.92, Obj2TI v1.0, Library v2.4 SP1, IDE v2.8 SP2
Updated: Applied the TIGCC patch to GCC 3.0, which introduces some optimizations and more warnings.
Updated: Replaced Xavier's linker with new
obj2ti by Julien Muchembled.
Added: Added an AmigaOS to COFF converter for A68k programs. This allows for seamless A68k integration in TIGCC.
Updated: Included new 32-bit version of A68k by Kevin Kofler.
Updated: Implemented floating point constant folding. The floating point system can now be used the same way as on any other machine.
Added: The '-Wl,...' and '-Wa,...' options are now available in the command line compiler. This means that you can pass options to the GNU assembler and GNU linker.
May 1, 2001: TIGCC v0.91 SP1, Link v1.2, Library v2.4 SP1, IDE v2.8 SP1
Bugfix: Kernel support is fixed.
Bugfix: Support for exit and atexit is clean now. Thanks to Julien Muchembled for the information.
Added: A short credits list is now included in the documentation.
Updated: Little maintainance updates in the IDE had to be made.
Updated: A few minor bugfixes were also necessary.
March 24, 2001: TIGCC v0.91, Link v1.2, Library v2.4, IDE v2.8
Added: Support for multiple files is now stable since the GNU linker is used.
Added: Archives (extension
.a) are now supported. A file
tigcc.a has been created, which is included automatically in all projects.
Added: Important debug information is now included in the
.s file(s) if a program is compiled with the '-g' switch or with the corresponding option in the IDE.
Added: Support for binary values (
0b...) has been implemented, but its use is strongly deprecated for portability reasons.
Updated: Various updates in the IDE have been made.
December 18, 2000: TIGCC v0.9, Link v1.2, Library v2.3, IDE v2.71
Updated: Fixed various bugs in the compiler.
Added: Implemented native floating point support.
Updated: The IDE and
tigcc now include the necessary patches automatically.
Bugfix: GCC now works around the uninitialized data bug if the '-mmlink' switch is not used. This makes programs larger, but it is possible not to initialize data and still compile the program correctly until the bug is fixed.
Added: The compiler now accepts the switches '-mpcrel', '-mlong', '-mno-tios', and '-mmlink'.
tigcc now accepts the '-bsr' switch for using bsr code where possible, the '-pack' switch for compression, and 'v' as well as '-v0'.
Updated: Made some additions and fixes in the IDE and the library.
Updated: Changed the directory structure again, since the previous one didn't really make sense any more.
October 11, 2000: TIGCC v0.8, Link v1.2, Library v2.22, IDE v2.7
Updated: Recompiled GCC using the latest tools and sources.
Updated: Included latest versions of the IDE and the Library.
June 26, 2000: TIGCC v0.7, Link v1.2, Library v2.0, IDE v2.6
Updated: The linker now supports
Updated: The linker accepts a new switch: '-outputbin' will make it output the raw executable file as it is on the calculator. Of course this
'.bin' file can not be transferred to the calculator.
Updated: The linker will display the compiled file size even with the quiet switch '-q' enabled.
Updated: Included library is TIGCCLIB 2.0.
Added: Included TIGCC IDE by Sebastian Reichelt.
Updated: The directory structure has been completely changed and is now clearer.
Updated: The installation is a lot easier thanks to Sebastian Reichelt's setup program.
April 6, 2000: TIGCC v0.65, Link v1.1, Library v1.5
Bugfix: sometimes some weird characters were appended to the file name and it wasn't compiled.
Updated: TIGCCLIB is now version 1.5.
Februar 5, 2000: TIGCC v0.6, Link v1.1, Library v1.1
Added: The library tigcclib by Zeljko Juric is added in the package.
The source of
tigccins (the installation program) is included in the distribution.
Bugfix: Libraries are now compiled correctly (there was a strange bug before).
Bugfix: Linking multiple object files now seems to work perfectly (mail Xavier Vassor if you find a bug).
tigccins are now 32-bit
console programs (instead of 16-bit DOS programs)
September 26, 1999: TIGCC v0.51, Link v1.01
Bugfix: C symbols that where exported out-of-order by GCC (i.e.
are now inserted properly in the
.9xz file. This will make it possibe to write libraries in C the way it should be done.
_comment symbol is now properly recognized in both C and
link now have the '-q'
option for quiet assembling or compilation. Does not affect warnings and errors.
The source of
tigcc is included in the distribution.
July 16, 1999: TIGCC v0.5, Link v1.0
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.