Turbo-Basic XL
Turbo-Basic XL is an advanced version of the BASIC programming language for the Atari 8-bit family of home computers. It is a compatible superset of the Atari BASIC that was built-in to most Atari machines of the era.
Turbo-Basic XL greatly improves execution over Atari BASIC. An Atari BASIC program loaded into Turbo-BASIC, with no changes made, would generally run about three times as fast. A Turbo-Basic XL compiler created binary executables, further speeding up program performance to about ten times faster than Atari BASIC.
Turbo-Basic XL includes other upgrades, including an expanded editor, support for named procedures, and similar block constructs, and added access to the underlying hardware, which, among other things, allowed operation of attached floppy drives without exiting to DOS.
Turbo-Basic XL was developed by Frank Ostrowski and published in the December 1985 issue of German computer magazine Happy Computer. A version for the 400/800 models was released shortly after, known as Frost Basic 1.4. Several modified versions working with different DOS systems have also been released by other authors.
Background
Since their release in 1979, the 8-bit family normally shipped with a version of Atari BASIC on a ROM cartridge, or built into the internal ROMs on later machines. This version of BASIC had a number of custom commands that allowed partial access to the system's advanced features like graphics and sound. It was notoriously slow, appearing at the very bottom of the list of microcomputer BASICs in the original version of David Ahl's Creative Computing benchmark.The poor performance of the official Atari BASIC led to a market for 3rd party BASICs with better performance or more commands. Among them was an official port of Microsoft BASIC sold by Atari, several improved versions released by Optimized Systems Software, who had written the original Atari BASIC under contract, and many others. There were also several Atari BASIC compilers from a variety of vendors.
Turbo-Basic XL was a late entry to this list, first published in December 1985 as type-in program. It was unique in that it came in both interpreter and compiler versions. It included code to take advantage of the expanded memory available on the XL series machines, and later XE series. This meant that it could not run on the original 400/800 systems, which led Ostrowski to make a port known as Frost BASIC that was tied to Atari DOS 2.0.
The internal disk-related commands were tied to particular versions of DOS. A number of ports to different versions of DOS became available.
Speed improvements
The most notable feature of Turbo-Basic was its dramatically improved speed; an unmodified Atari BASIC program loaded into Turbo-Basic would normally run three to five times faster, and this would improve as the program size grew. This was due largely to a series of improvements on well-known problems in the original Atari BASIC code.In most BASICs, GOTO was handled by reading the associated line number and then searching through the program for that line of code. In MS-derived BASICs the line numbers were stored as 16-bit integers and numeric constants in the code in their original ASCII format. When a line like was encountered, the interpreter would use special code to convert the "1000" into 16-bit format and then search for it. Atari BASIC worked differently, converting all numeric constants to a 6-byte floating-point format. This meant the "1000" was no longer in ASCII format and had to be converted from floating-point to integer format. The code for doing so was not well optimized and could take up to 3500 ms.
FOR...NEXT loops are another common construct in BASIC programs. In most BASICs, when the FOR portion was encountered at runtime, its memory location in the source code was pushed onto a call stack so it could easily return to that location when the associated NEXT was encountered. For unknown reasons, Atari BASIC pushed the line number of the FOR onto the stack and then looked through the entire code for that line when it encountered the NEXT. For programs that did significant looping, which is often the case in BASIC, this could cause a dramatic performance hit.
Turbo-Basic implemented its FOR loops using the address, as was the case in MS BASIC, and thus ran loops with roughly the same performance as MS. It then went further and greatly improved GOTO performance as well. Line numbers were sent into a hash function that broke them into 256-line chunks. As the program was entered, the address of the first of each of these chunks was stored in a 128-value table. At runtime, when a line number lookup was needed, it would first pick the nearest-but-lower value in the table, retrieve the address, and then begin scanning for the line from that point. The improvement was most notable in larger programs where the scanning time was increasingly expensive, which is why Turbo-Basic could hit a 5-times increase in larger programs.
The other major source of poor performance in Atari BASIC was its very slow binary coded decimal floating point code. The library, contained in a separate 2k ROM and considered part of the operating system as opposed to BASIC itself, had been written in a hurry and never optimized. Some of the routines, notably the multiply and exponents functions, were far slower than they could be.
Turbo-Basic fixed this by including its own complete floating-point library, which not only fixed many of these issues but also further optimized the code by unrolling small loops. For programs that used math extensively, the new library resulted in dramatic performance improvements, sending the Atari from near the bottom of the Ahl benchmark lists to near the top, beating a number of machines that were much faster in hardware.
New features
Among the extra features of Turbo-Basic XL, added to ATARI BASIC, are the following:- enhanced sound and graphics commands
- more flexible I/O commands, including disk access
- structured programming constructs
- simple debugging facilities