Tiny BASIC History
Tiny BASIC has an interesting decades-old history and is a precursor to the modern Free Software movement.
The Beginnings of BASIC
The original BASIC language was developed in 1964 by John Kemeny and Thomas Kurtz, on on a cut-price minicomputer at Dartmouth College, USA. It was intended to be easy enough to learn for students of all disciplines, not just computing, so that those moving on to a variety of careers got a taste of what computers could do for them.
The language spread to other institutions, and because of its simplicity, it became a de facto standard for microcomputers when they first started to appear. The microcomputer versions were somewhat cut down compared to the original 1964 version, but were still capable languages.
A Language for Hobbyists
When microcomputers became popular among hobbyists, cost became an issue. In the minicomputer era, software was often exchanged for free. But when software became a commodity and its authors began to make a living from its creation, hobbyists found that software like a BASIC interpreter now had a substantial cost attached. That cost was increased by BASIC's demands on memory, when authors tried to cram as much of the language's functionality as they could into the microcomputers of the era.
Then came Tiny BASIC. The project started in 1975, a year before Bill Gates' famous Open Letter to Hobbyists, which urged people to pay up for software such as Micro-Soft's BASIC language instead of just copying it. Gates' letter motivated many hobbyists to participate in the Tiny BASIC project, which aimed to be free and to be small, suiting the limited budgets and limited hardware that people had at the time.
Tiny BASIC was really just a subset of BASIC. While "real" BASIC had string handling, floating point arithmetic, arrays and some primitive loop structures, Tiny BASIC had none of these things. Strings were just literals to be PRINTed, arithmetic was integer only, data storage was limited to the 26 variables A-Z, and looping was performed by IF...GOTO constructs. But the language would fit into a 4K microcomputer, and it cost the user nothing.
When publishing the specification, Dennis Allison encouraged others to build their own implementations, and to expand its capabilities to their desires. People soon began adding FOR loops, arrays, more sophisticated output options, and in some cases even some rudimentary string handling. Allison admitted being slow off the mark in his own implementation due to lack of time, expanded versions appeared before any implementation that more closely followed the specification.
Some expanded versions of the language became influential. Tom Pittman's version has only a few additions: comments, tabulated output and a couple of functions including a random number generator. These modest improvements vastly increased the usefulness of the language and this version was the starting point for some much later implementations. Pittman himself ported the interpreter to C so that it could be compiled on more modern systems.
More powerful than that was Palo Alto Tiny BASIC by Li-Chen Wang. This added similar functionality to Pittman's version, but also FOR loops, and a single array-like data structure which allowed indexed access to available memory. This version also became the starting point for later implementations.
Some versions which were very powerful but fell by the wayside include those for early single-board computers like Heathkit's 3400 and those based on the National Semiconductor SC/MP. These would add simple string handling and even a DO...UNTIL construct for more structured programming. Their feature set approaches that of the full versions of BASIC built into 1980s home computers.
Tiny BASIC continues to be used in the present day, and is popular for current single-board project computers like the Arduino. These computers have limited memory by present-day standards, and Tiny BASIC's simplicity is a good way to allow them to be easily programmed to do simple tasks by those not comfortable with C or assembly language.
Its secondary purpose nowadays is as a relatively easy target for compiler and interpreter projects like the one that this web site is based on. Its simplicity and historical background makes it an ideal first compiler project.