| 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 theBASIC programming language that shipped with the firstTRS-80, the TRS-80 Model I.
Tandy employee Steve Leininger wrote the first draft of theNIBL (National Industrial Basic Language)BASIC interpreter for theSC/MP while employed atNational Semiconductor.[1] Unable to take that source code with him, he initially hired a consultant to write aninterpreter. When the consultant failed to deliver,[2] Leininger,Don French, and BASIC manual author David A. Lien[3] adaptedLi-Chen Wang's public domain version ofTiny 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 theinterpreter, 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 PresidentCharles Tandy tried to enter his salary but was unable to do so, because Tiny BASIC uses2-byte signed integers with a maximum value of 32,767. The result was a request forfloating-point math for the production version.[5] This led to the replacement of the existing 16-bit integer code with a version using 32-bitsingle-precision floating-point numbers. Leininger further extended the language to support input/output routines (keyboard, CRT, and reading and writing from cassettes). The language fits within 4 KB ofROM.[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 supports the following keywords:[9]
NEW,RUN,LIST,CLOAD,CSAVE,CONT (to continue or resume a program from abreakpoint)PRINT,INPUT,READ,DATA,RESTORE,LET,REMAT,TABGOTO,GOSUB,ON-GOTO,ON-GOSUB,RETURN,IF-THEN (but noELSE),FOR-TO-STEP,NEXT,STOP,ENDCLS,SET,RESET,POINT()ABS(),INT(),RND(),MEM+-*/<>=<==><>* (AND)+ (OR)Like Palo Alto Tiny BASIC on which it was based, Level I BASIC does nottokenize keywords likeMicrosoft BASIC but uses abbreviations to reduce the amount of memory used by keywords, such asF. forFOR,G. forGOTO,P. forPRINT, andT. forTHEN.
The language supports 26 single-precision variables A to Z, twostrings A$ and B$ (limited to 16 characters each), and one pre-definedarray A(). The language lacks a DIM statement for dimensioning the array, the size of which is determined by available memory not used by the program listing (4 bytes per item).[10] As the language lacks many common math functions, the manual providessubroutine listings forsquare root,exponentiation,exponentials,logarithms,arithmetic sign, andtrigonometry functions.[11]
Graphics support is minimal:CLS, for CLear Screen;SET(X,Y), which lights a location on the display;RESET(X,Y), which turns it off; andPOINT(X,Y), which returns 1 if a location was lit, 0 if it was not. The coordinates can be any expression and ranges from 0 to 127 for theX-axis and 0 to 47 for theY-axis. Only black-and-white display is supported.[12]