Atari BASIC#

Background#

Atari BASIC is the "standard" BASIC dialect for the 8-bit series. It was originally sold separately as a (relatively expensive) 8k ROM cartridge. Starting with the 1200XL, the ROMs were included inside the machine. There are three versions, the original version, retroactively known as Revision A, and the updated Revision B and C which fixed various bugs.

Atari originally licensed the 6502-assembler code for Microsoft BASIC. This came in two versions, one that was about 7900 bytes that used a 6-byte floating point number format, and another that was closer to 9000 that included an expanded floating point format with 9-byte numbers. The vast majority of 8-bit machines used the larger 9k version, and then further expanded it with additional functions for basic input/output. For instance, the BASIC and I/O in the early PET machines was supplied in a total of 12k of ROM.

Atari had selected an 8k cartridge format because that was an easy size to supply in a single ROM. So the Atari programmers started with the smaller 8k version of the MS code and struggled to cut it down enough to fit in a cart. That was hard enough of its own, but they really wanted to add additional instructions to take advantage of the Atari's graphics and sound. Eventually, some time in the summer of 1978, they gave up and went looking for a 3rd party to do it for them.

Shepardson Microsystems Inc, or SMI for short, won the contract. They proposed a simplified syntax and the cutting of a number of rarely-used features, leaving more room for new commands for graphics and sound. Even then, the result required about 10k, so to cross the remaining gap to 8k, some of the core libraries were moved out of the language and into the operating system ROMs. This had the side-effect of allowing any other language on the Atari to use these routines as well.

By the time SMI was hired, Atari was in something of a rush to get a working BASIC. They were planning to show the machines in January 1979, using the working MS version, but then sell the machines later that year with the SMI version instead. The original contract required SMI to make its final delivery in April 1979, but it contained bonus clauses if they finished early. They did: a working version was delivered in October 1978, so Atari to that to CES instead. To SMI's surprise, they learned that Atari had begun burning that version to ROM for sale, even though it had several known bugs. SMI offered an updated version with various fixes, but Atari didn't bother using it, and instead shipped the buggy version for years.

Two major pieces of code were moved out of the BASIC into the OS ROM. The first was a set of graphics routines to set up the screen, draw lines, and similar. The second was the floating point math system, based on a new implementation of the 6-byte binary-coded-decimal (BCD) format. Both libraries were notoriously slow. Generally, Atari BASIC was among the slowest BASICs of its era, both due to the OS code and two problems involving loops.

The performance issues led to a profusion of 3rd party BASICs, some of which continue to be developed to this day. By replacing the math libraries and fixing these two loop issues, speed improves on the order of 3 to 5 times in most programs, and this is a common feature of 3rd party BASICs like TURBO-BASIC XL and Altirra Basic. For even higher performance, FastBasic uses a p-code system that can be quickly interpreted.

Design notes#

Atari BASIC has some key differences with the more common MS-derived BASICs found on most contemporary machines. This included the 6-byte vs. 9-byte math, but also included numerous syntax changes as well. Generally, one can describe Atari BASIC's design philosophy as "modeless" and "orthogonal".

Most BASICs of the era had the concept of "immediate mode" and "program mode", and some commands could only be used in one more or the other. A good example in MS BASIC is the LIST command, which could only be used in immediate mode, at the "command line". Atari BASIC removed this limitation, one could write a program containing 10 LIST.

Additionally, most BASICs had commands that read input or produced output, for example, the INPUT can be thought of as the opposite of PRINT. Atari BASIC was orthogonal in that every such command had a partner. For instance, LIST produces output, so the new command ENTER reversed this, reading a program listing from a device. This opened up a number of possible overlay techniques that other BASICs lacked.

The most noticable difference between Atari BASIC and MS-derived versions is the string handling. Atari BASIC used a greatly simplified system of character-arrays instead of the dynamic strings in MS. This meant that all strings had to be predefined using DIM, and their length could not be changed during run-time. There are a number of advantages to this approach, notably speed, but memory handling is more difficult and conversion of standard programs from MS listings is more difficult.

What's missing#

In addition to differences like string handling, Atari BASIC also lacked some of the less-used features found in MS BASIC. Among these are...
  • TAB and SPC, for formatting output
  • PRINT USING, which formatted output
  • INPUT "prompt", A$, which printed the prompt and placed the cursor at the end
  • DEF FN, which defines mathematical functions
  • ON X GOTO/GOSUB, similar to C's switch construct

Most 3rd party BASICs add many of these features, and more.

What's new#

To allow BASIC programmers access to the advanced features of the system, Atari BASIC added commands for defining the GRAPHICS, changing COLORs, MOVEing and drawing a LINETO, playing SOUND, and others.

Books#

CAR-Images#

ROM-Images#

Atari Basic Course: An Invitation to Programming 1-3#

Kurs 1: Programmieren leicht gemacht-Lernen Sie BASIC mit Dagmar Berghoff-TXG4110#

Kurs 2: Noch mehr BASIC-Lernen Sie BASIC mit Dagmar Berghoff-RXG 55007#

Kurs 3: BASIC für Fortgeschrittene-Lernen Sie BASIC mit Dagmar Berghoff#

Source and Tools#

Add new attachment

Only authorized users are allowed to upload new attachments.

List of attachments

Kind Attachment Name Size Version Date Modified Author Change note
pdf
ATARI BASIC-Handbuch für Selbs... 44,779.2 kB 1 23-Apr-2014 00:52 Roland B. Wassenberg ATARI BASIC-Handbuch für Selbststudium und Praxis-BOB ALBRECHT, Le Roy Finkel, J
pdf
ATARI Basic Leitfaden.pdf 5,181.8 kB 1 23-Apr-2014 01:54 Roland B. Wassenberg ATARI Basic Leitfaden
pdf
An_Invitation_to_Programming_1... 896.7 kB 1 21-Sep-2013 22:07 Roland B. Wassenberg An_Invitation_to_Programming_1-Screen_Version.pdf
jpg
An_Invitation_to_Programming_1... 327.0 kB 1 21-Sep-2013 22:08 Roland B. Wassenberg An_Invitation_to_Programming_1.jpg
jpg
An_Invitation_to_Programming_2... 246.9 kB 1 21-Sep-2013 22:08 Roland B. Wassenberg An_Invitation_to_Programming_2.jpg
jpg
An_Invitation_to_Programming_3... 251.1 kB 1 21-Sep-2013 22:09 Roland B. Wassenberg An_Invitation_to_Programming_3.jpg
pdf
Atari BASIC Quick Reference Gu... 10,374.7 kB 1 17-Mar-2014 03:11 Roland B. Wassenberg Atari BASIC Quick Reference Guide-Gilbert Held.pdf
rom
Atari Basic Rev. A.rom 8.2 kB 1 24-Feb-2014 20:46 Roland B. Wassenberg Atari Basic Rev. A.rom
rom
Atari Basic Rev. B.rom 8.2 kB 1 24-Feb-2014 20:46 Roland B. Wassenberg Atari Basic Rev. B.rom
rom
Atari Basic Rev. C.rom 8.2 kB 1 24-Feb-2014 20:46 Roland B. Wassenberg Atari Basic Rev. C.rom
car
Basic Rev. C.car 8.2 kB 1 24-Feb-2014 20:44 Roland B. Wassenberg Basic Rev. C.car
txt
REV.B TO REV.C CONVERTER.txt 3.2 kB 1 17-Mar-2014 03:14 Roland B. Wassenberg REV.B TO REV.C CONVERTER.txt
atr
RevB2C.atr 92.2 kB 1 17-Mar-2014 03:14 Roland B. Wassenberg RevB2C.atr
car
The Monkey Wrench II.car 8.2 kB 1 24-Feb-2014 20:53 Roland B. Wassenberg The Monkey Wrench II.car
car
The Monkey Wrench.car 8.2 kB 1 24-Feb-2014 20:53 Roland B. Wassenberg The Monkey Wrench.car
« This page (revision-49) was last changed on 18-May-2018 15:29 by Maury Markowitz