Level I BASIC | |
---|---|
Designed by | Steve Leininger |
First appeared | 1977 |
Influenced by | |
Tiny BASIC, Palo Alto Tiny BASIC | |
Influenced | |
TRS-80 Level II BASIC |
Level I BASIC is a dialect of the BASIC programming language that shipped with the first TRS-80, the TRS-80 Model I.
Tandy employee Steve Leininger had written the first draft of the NIBL (National Industrial Basic Language) BASIC interpreter for the SC/MP while employed at National Semiconductor . [1] Unable to take that source code with him, he initially hired a consultant to write an interpreter. When that contractor failed to deliver, [2] Leininger, Don French, and BASIC manual author David A. Lien [3] adapted Li-Chen Wang's public domain version of Tiny BASIC for the prototype TRS-80 Model I. Leininger said, "we went back through the Wang Basic and completely tore out about 60 per cent of it, the integer overhead and all that kind of stuff". [4] The result required only 2 KB of memory for the interpreter, leaving an average of another 2 KB free for user programs in common 4 KB memory layouts of early machines.
During a demonstration to executives, Tandy Corporation President Charles Tandy tried to enter his salary but was unable to do so. This was because Tiny BASIC used 2-byte signed integers with a maximum value of 32,767. The result was a request for floating-point math for the production version. [5] This led to the replacement of the existing 16-bit integer code with a version using 32-bit single-precision floating-point numbers. Leininger further extended the language to support input/output routines (keyboard, CRT, and reading and writing from cassettes). The language fit within 4 KB of ROM. [6]
When the TRS-80 was introduced, three versions of BASIC were announced:
The Level I language was not available for the TRS-80 Model II but briefly re-surfaced as the baseline package for the TRS-80 Model III in 1981, selling for $699 compared to the $999 system with Model III BASIC (another Microsoft product). The language was identical to the Model I version but with the addition of two commands, the LLIST and the LPRINT, to output to a printer. [8]
Level I BASIC supported the following keywords: [9]
NEW
, RUN
, LIST
, CONT
(to continue or resume a program from a breakpoint)PRINT
, INPUT
, READ
, DATA
, RESTORE
, LET
AT
, TAB
GOTO
, GOSUB
, ON-GOTO
, ON-GOSUB
, RETURN
, IF-THEN
(but no ELSE
), FOR-TO-STEP/NEXT
, STOP
, END
CLS
, SET
, RESET
, POINT()
ABS()
, INT()
, RND()
, MEM
+
-
*
/
<
>
=
<=
=>
<>
*
(AND) +
(OR)Like Palo Alto Tiny BASIC on which it was based, Level I BASIC did not tokenize keywords like Microsoft BASIC but used abbreviations to reduce the amount of memory used by keywords, such as F.
for FOR
, G.
for GOTO
, P.
for PRINT
, and T.
for THEN
.
The language supported 26 single-precision variables A to Z, two strings A$ and B$ (limited to 16 characters each), and one pre-defined array A(). The language lacked a DIM statement for dimensioning the array, the size of which was determined by available memory not used by the program listing (4 bytes per item). [10] As the language lacked many common math functions, the manual provided subroutine listings for square root, exponentiation, exponentials, logarithms, arithmetic sign, and trigonometry functions. [11]
Graphics support was as minimal a set as possible: CLS
, for CLear Screen; SET(X,Y)
, which lighted a location on the display; RESET(X,Y)
, which turned it off; and POINT(X,Y)
, which returned 1 if a location was lit, 0 if it was not. The coordinates could be any expression and ranged from 0 to 127 for the X-axis and 0 to 47 for the Y-axis. Only black-and-white display was supported. [12]