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 launcherCurrent 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 |
TIGCC v0.96 Beta 9 based on the GNU Compiler Collection v4.1.2 and GNU Binutils v2.16.1 compiled under MinGW32 by Jean Canazzi, Sebastian Reichelt, and Kevin Kofler
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
Parts from the TIGCC Tools Suite by the TI-Chess Team (i.e. Thomas Nussbaumer) as well as his grayscale support have been used.
TIGCC Tools Suite Copyright (C) 2000-2004 Thomas Nussbaumer
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 .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.
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 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.
These are the people we would like to thank for their contributions to TIGCC:
Thomas Nussbaumer (website), for his grayscale 'port' from Universal OS, and for the packing tools in the TIGCC Tools Suite (available on tict.ticalc.org)
François Revol, for his help on GCC-related issues
John David Ratliff (website), for his tutorials and for the CGI script for the bug report form
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
Jocelyn Berrendonner, for his immense work on menus.h, dialogs.h and files.h, and for some other TIGCCLIB updates
Romain Liévin (website), for the Linux port, the document about the internals of TIGCC, and work on the documentation
Lionel Debroux (website), for documenting AMS 2.xx functions from unknown.h
Samuel Stearley, for most of the home screen functions defined in homescr.h
Olivier Armand, for an improved internal Line 1111 emulator
Greg Dietsche, for a lot of updates to stdio.h
Joel Thompson, for extracting the examples from the documentation, and for some other updates (e.g. to gdraw.h and vat.h)
Daniel De Graaf, for updates to gdraw.h and estack.h
Ephyx, for the IDE code completion patches and other IDE improvements
Sébastien Leurent, for his improvements to Wazabbe's dialogs.h
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 Mlink-format relocs (MLINK_FORMAT_RELOCS, MLINK_FORMAT_BSS, MLINK_FORMAT_ROM_CALLS, MLINK_FORMAT_DATA_VAR).
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.
Bugfix: tprbuilder
doesn't crash on long tigcc.exe
command lines
under Windows 9x/Me anymore.
Bugfix: 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)
anymore.
Bugfix: Removing unused sections in ld-tigcc
now really removes all unused
sections.
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 ld-tigcc
.
Bugfix: Fixed invalid kernel ROM_CALL or RAM_CALL tables emitted by ld-tigcc
when
unused section removal optimized all ROM or RAM_CALLs away.
Bugfix: 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.
Bugfix: Fixed -v
and -v0
being limited to 255 characters in the
Windows command-line compiler.
Added: The command-line compiler now supports -isystem
properly.
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
to
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: An entirely new linker, as a basis for all other improvements (see Advanced Options of TIGCC).
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: Fixed bug in
ENABLE_ERROR_RETURN
with MIN_AMS
values of 200 or higher.
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
Bugfix: Fixed SET_FILE_IN_USE_BIT
.
Bugfix: Fixed the prototype of MD5Update.
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 obj2ti
.
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.
Updated: Made tigcc
look for archives in the 'Lib'
subfolder of the installation.
Updated: Repaired some bugs to support debugging switches like '-ggdb'.
Updated: Recompiled all programs under MinGW32, thereby removing the need to use Cygwin.
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 tigcc
.
Bugfix: Fixed a problem with linking multiple A68k files.
Added: Added the '-WA,...' option to pass switches to a68k
.
Bugfix: Cleaned up the whole patch code, including the support for exit and atexit. Fixes were developed by Patrick Pélissier, Kevin Kofler, and Stephan Effelsberg.
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 Ctrl+Tab
.
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'.
Updated: 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 EXTRA_RAM_TABLE
symbols.
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).
link
, tigcc
, 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.
library@0000
, library@0002
, library@0001
...)
are now inserted properly in the .89z
/.9xz
file. This will make it possibe to write libraries in C the way it should be done.
Bugfix: The _comment
symbol is now properly recognized in both C and
assembly programs.
Added: Both tigcc
and link
now have the '-q'
option for quiet assembling or compilation. Does not affect warnings and errors.
The source of link
and tigcc
is included in the distribution.
July 16, 1999: TIGCC v0.5, Link v1.0
Initial release.
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.