It is a good time for statically recompiled versions of BASIC from old computers.Â First there was Apple I BASIC.Â Then came Commodore BASIC.Â Now, due to overwhelming demand, we’re proud to release TI-99/4A BASIC. For those unfamiliar the TI-99/4A was a home computer by Texas Instruments released in 1981. Unusually for the time it had a 16-bit CPU: the TMS9900.
Download the program from the project page on SourceForge. Binaries for Windows and Mac OS X are available and the source should compile on most POSIX-like systems. If you port it to a new platform please drop us a line; we’d love hear about it.
It supports the same interfaces as the previous projects.Â You can use it interactively in direct mode:
$ tibasic TI BASIC READY >print 4*atn(1) 3.141592654 >bye
Or you can write a line-numbered program:
$ tibasic >10 FOR I=1 TO 10 >20 PRINT TAB(I);"Hello, world!" >30 NEXT I >RUN Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! ** DONE ** >BYE
You can also run programs from a file:
$ cat name.bas 10 INPUT "What is your name? ":N$ 20 PRINT "Hello, ";N$;"!" $ tibasic.exe name.bas What is your name? James Hello, James!
There are a few sample programs available on the homepage that you can run in this manner.
How it works
This program works much like the already mentioned Commodore BASIC project. The original program is statically recompiled to produce a new native binary. The recompiler is the work of Michael Steil and theÂ support for the TI-99/4A is by James Abbatiello.
The output of the recompiler is tibasic.c which is platform independent. The support functions are in runtime_functions.c and it is this file that you would edit to port to a new system or to add new features.
There are a couple quirks of the TI-99/4A which made this a bit trickier to support than the C64 version:
- The BASIC interpreter was not written in assembly language as you might expect. Instead it was programmed in something called Graphics Programming Language (GPL). GPL was much like an assembly language with some high-level primitives for commonly needed functions. A program written in GPL would be assembled to bytecode and then run on an interpreter that was written in TMS9900 assembly language. This made BASIC programs on the machine rather slow. The CPU would execute the GPL interpreter. The GPL interpreter would run the BASIC interpreter. Finally, the BASIC interpreter would run your program. Only the TMS9900 code is statically recompiled in this program. The GPL still runs interpreted just as it did on the original machine. While it would theoretically be possible to statically recompile the GPL code as well this would be significantly more difficult since GPL was never officially documented by TI. The only definitive reference is the original interpreter.
- C64 BASIC outputs characters to the screen via one function (CHROUT) which was easy to trap. TI-99/4A BASIC outputs to the screen with direct writes to video memory from multiple different places in the code. This requires some ugly hacks to get anything approximating reasonable on stdout.
The Cassette, Disk, and Sound devices are not currently emulated. Contributions in these areas are most welcome.