Jump to content

Turbo-BASIC XL

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Maury Markowitz (talk | contribs) at 18:11, 25 September 2019. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Turbo-Basic XL
Original author(s)Frank Ostrowski
Initial releaseDecember 1985; 39 years ago (1985-12)
Written inBibo Assembler
PlatformAtari 8-bit family

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's most notable feature was vastly improved execution speed. 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 was also available that created binary executables, further speeding up program performance to about ten times faster than Atari BASIC.

Turbo-Basic XL also included a wide range of other upgrades, including an expanded editor, support for named procedures, WHILE...ENDWHILE 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.[1]

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 (short for "Frank Ostrowski") 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. A simple improvement was to compare the line number to the line it was found in; if the GOTO line number was larger, the interpreter would only search forward from that spot, if it was smaller, it would search from the start of the program (MS BASIC included a pointer to the next instruction, but not previous). Atari BASIC lacked this simple improvement, searching through the code from the start every time.

FOR...NEXT loops are another common construct in BASIC programs. In most BASICs, when the FOR portion was seen, its location in the source code was pushed onto a call stack so it could easily return to the FOR when the associated NEXT was encountered. Atari BASIC lacked this improvement, instead it looked through the entire code for the associated FOR, which took up considerable time. For programs that did significant looping, which is often the case in BASIC, this could represent a dramatic performance hit.

Turbo-Basic used the address of the FOR as in MS-BASIC, but then went further and greatly improved the 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 256-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 on larger programs.

The other major source of poor performance in Atari BASIC was its very slow binary coded decimal (BCD) 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 multiply and exponents, 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:

References

  1. ^ Ahl, David (November 1983). "Benchmark comparison test". Creative Computing. p. 260.