BASIC-PLUS
The BASIC dialect written by Evans, Griffiths & Hart for Digital Equipment Corporation's RSTS-11 timesharing system on the PDP-11, which added string functions, statement modifiers and virtual arrays to Dartmouth BASIC and is cited as the model for the original Microsoft BASIC.
Created by Evans, Griffiths & Hart (EGH Inc.: Tim Hart, Tom Evans and Tom Griffiths) under contract to Digital Equipment Corporation
BASIC-PLUS is an extended dialect of BASIC written for Digital Equipment Corporation’s (DEC) RSTS-11 timesharing operating system on the 16-bit PDP-11 minicomputer. It was created by a small outside firm, Evans, Griffiths & Hart, and shipped in 1971. On RSTS it was more than a programming language: it was also the system’s command interpreter. It is remembered for adding MID$-style string functions and inline statement modifiers to Dartmouth BASIC, and it is cited as the dialect on which the original Microsoft BASIC was patterned.
History & Origins
Background
DEC had already sold BASIC-8 for the PDP-8, developed at the initiative of David H. Ahl, which was itself close to original Dartmouth BASIC. For the PDP-11, DEC’s first timesharing attempts (a multi-user monitor layered on DOS-11, with a BASIC-11 above it) reportedly ran very slowly. A new team began work on 11 June 1970 on an operating system called IOX (Input Output eXecutive). One of its ideas was to use a programming language as the command shell as well. Accounts say there was an internal argument over whether that language should be FOCAL or BASIC, and that marketing settled it in favour of BASIC.
EGH takes the contract
With DEC’s engineers absorbed by the operating system, nobody was working on the BASIC. Tim Hart, Tom Evans and Tom Griffiths, who had formed EGH Inc., received a tender from DEC on 25 August 1970, submitted a deliberately low bid of $10,500 on 4 September, and were awarded the contract on 18 September. DEC recognised the price was too low and added a $3,000 bonus clause.
The original plan was for EGH to write only the language translator and utilities, with DEC writing a separate runtime, so that small machines could run programs with just the runtime. EGH ended up building the entire system and delivered it in January 1971. The runtime-only idea was later dropped. IOX was renamed RSTS-11 and shipped with BASIC-PLUS in 1971.
A note on the year
Sources disagree slightly, and the encyclopedia’s master list gives 1972. The 1971 shipping date rests on Clare Fleig’s 1983 Hardcopy article as cited by Wikipedia, and is consistent with RSTS-11 installations reported for 1971. The earliest primary document this entry cites is the October 1972 BASIC-PLUS Language Manual, which probably explains the later year. This page uses 1971 for first release; the 1970 figure that appears in some infoboxes is the development start.
Design Philosophy
BASIC-PLUS aimed to be a more complete BASIC than DEC’s earlier dialects, borrowing selectively:
- From Dartmouth BASIC came the core statements and the
MATmatrix commands. - From JOSS (and, per some accounts, DEC’s FOCAL) came conditional formatting ideas, including statement modifiers.
- Because it doubled as a shell, it needed system-level file and program-chaining facilities beyond a classroom BASIC.
Key Features
Statement modifiers
Conditions could be attached to the end of a statement instead of using IF ... THEN:
| |
Line 10 is equivalent to IF I <> 10 THEN PRINT I. This construct was not carried into the microcomputer BASICs that followed.
Strings and data types
Variables without a suffix were floating point (reportedly about 16 digits of precision in the usual 64-bit configuration; a 32-bit option is said to have existed), % marked 16-bit integers and $ marked variable-length strings. String functions such as LEFT$ and MID$ sat alongside Dartmouth’s CHANGE, which converts between a string and an array of character codes. Most later BASICs kept the functions and dropped CHANGE.
Other notable features
| Feature | Detail |
|---|---|
| Matrix operations | MAT READ, MAT INPUT, MAT PRINT, TRN, INV, and +, -, * on matrices |
| Approximately-equal operator | == is true when two numbers print identically to six significant digits |
| Logical operators | AND, OR, XOR, EQV, IMP, NOT |
| Virtual arrays | DIM# maps arrays to a disk file, allowing data larger than memory, using a single 512-byte buffer |
| Comments | REM or ! |
| Chaining | CHAIN splits large programs; “core common” passes data between them |
| Line numbers | Integers from 1 to 32767 |
Early versions limited variable names to a letter or a letter plus a digit; a later “Extend mode” allowed names up to 29 characters.
Implementation
BASIC-PLUS was not a simple interpreter, nor a true compiler. Each line was translated as typed into “PPCODE” (push-pop code) for a stack-based virtual machine, a form of threaded code that could not be converted back to source. A COMPILE command saved this form to a .BAC file, which loaded and ran faster than the editable .BAS source.
A RSTS/E user’s virtual address space was a little under 64 KB, and the combined interpreter and runtime system took about half of it, leaving programs roughly 32 KB. This is why CHAIN and core common were so widely used.
Evolution
DEC later produced BASIC-Plus-2 (BP2), a true compiler that wrote object files, linked with the Task Builder and supported overlays. Its runtime reportedly took approximately 8 KB of address space rather than approximately 32 KB, so single programs could be much larger. Unlike BASIC-PLUS, BP2 was also available on RSX-11, and it was more compatible with the later VAX BASIC. That lineage continues today as VSI BASIC for OpenVMS.
Current Relevance
BASIC-PLUS is historical. RSTS/E’s last release was V10.1 in September 1992. The language survives mainly through retrocomputing: RSTS/E can be run under PDP-11 emulators such as SIMH, and DEC manuals for the language are reportedly archived on Bitsavers and the Internet Archive. This entry does not claim official support for any particular modern platform.
Why It Matters
BASIC-PLUS is important for three reasons. It showed that a BASIC could serve as a full timesharing environment and command shell. Its string-function style became the norm for BASIC. And, according to Stephen Manes’s 1993 book Gates (as cited by Wikipedia), the first Microsoft BASIC was patterned very closely on it, although Microsoft’s version omitted the statement modifiers and matrix commands. Through BASIC-Plus-2 it also became the ancestor of VAX BASIC and its successors.
Sources and Caveats
- Development dates and the EGH story come from Wikipedia’s BASIC-PLUS article, which cites Clare Fleig (Hardcopy, March 1983) and Peter Dick’s 1990 “RSTS 80th Birthday” talk. I did not check those originals directly.
- The Microsoft BASIC relationship rests on one secondary source (Manes) and was not independently verified.
- RSTS-11 version and installation details come from Wikipedia’s RSTS/E article and are unverified against primary DEC documents.
Timeline
Notable Uses & Legacy
RSTS-11 / RSTS/E timesharing systems
BASIC-PLUS was both the programming language and the command shell of RSTS, so users at terminals used it for everything from interactive programming to job control on PDP-11 timesharing machines
Educational institutions
Early RSTS-11 version 2A-19 is reported to have been installed at schools including Carleton College and Seattle Pacific College in 1971
Delaware School Auxiliary Association
Reported as the first commercial RSTS-11 deployment (version 2B, June 1971)
Business applications on RSTS/E
Wikipedia reports about 15,000 DEC machines running RSTS/E by 1983; BASIC-PLUS, with its virtual arrays and file handling, was the main language used on them, though this entry does not name specific corporate users