Sinclair BASIC
Sinclair BASIC is a dialect of the programming language BASIC used in the 8-bit home computers from Sinclair Research and Timex Sinclair. The Sinclair BASIC interpreter was made by Nine Tiles Networks Ltd.

History 
Sinclair BASIC was originally developed in 1979 for the ZX80 by Nine Tiles. The programmers were John Grant, the owner of Nine Tiles, and Steve Vickers.

It was initially an incomplete implementation of the 1978 American National Standards Institute (ANSI) minimal BASIC standard with integer arithmetic only, termed the 4K BASIC (for its ROM size) for the ZX80. It evolved through the floating-point 8K BASIC for the ZX81 and TS1000 (which was also available as an upgrade for the ZX80), and became an almost complete version in the 16 KB ROM ZX Spectrum. It is present in all ZX Spectrum compatibles.

As of 2015, interpreters exist for modern operating systems, and older systems, that allow Sinclair Basic to be used easily.

Syntax 

New BASIC programmers might start with a simple program, perhaps using the language's PRINT statement to display a message on the screen; a well-known and often-replicated example is Kernighan and Ritchie's Hello world program:

  10 PRINT "Hello, World!"

Keywords 
On the 16K/48K ZX Spectrum, there are 88 keywords in Sinclair BASIC, denoting commands (of which there are 50), functions and logical operators (31), and other keywords (16, including 9 which are also commands or functions):

Keyword entry
In 48K models and older, the keywords are entered via Sinclair's unique keyword entry system, as indicated on the table. The most common commands need one keystroke only; for example, pressing only  at the start of a line on a Spectrum produces the full command PRINT. Less frequent commands require more complex key sequences: BEEP (for example) is keyed by pressing  plus  to access extended mode (later models include an  key), keeping  held down and pressing . Keywords are colour-coded on the original Spectrum keyboard to indicate which mode is required:

 : key only
  on the key itself:  plus the key
  above the key:  followed by the key
  below the key:  followed by  plus the key

The ZX81 8K BASIC used the shorter forms GOTO, GOSUB, CONT and RAND, whereas the Spectrum used the longer forms GO TO, GO SUB, CONTINUE and RANDOMIZE. The ZX80 4K BASIC also used these longer forms but differed by using the spelling RANDOMISE. The ZX81 8K BASIC was the only version to use FAST, SCROLL, SLOW and UNPLOT. The ZX80 4K BASIC had the exclusive function TL$(); it was equivalent to the string operator  in later versions.

Unique code points are assigned in the ZX80 character set, ZX81 character set and ZX Spectrum character set for each keyword or multi-character operator, i.e. <=,  >=, <>, "" (tokenized on the ZX81 only), ** (replaced with ↑ on the Spectrum). These are expanded by referencing a token table in ROM. Thus, a keyword uses one byte of memory only, a significant saving over traditional letter-by-letter storage. This also meant that the BASIC interpreter could quickly determine any command or function by evaluating one byte, and that the keywords need not be reserved words like in other BASIC dialects or other programming languages, e.g., it is allowed to define a variable named PRINT and output its value with PRINT PRINT. This is also related to the syntax requirement that every line start with a command keyword, and pressing the one keypress for that command at the start of a line changes the editor from command mode to letter mode. Thus, variable assignment requires LET (i.e., LET a=1 not only a=1). This practice is also different from other BASIC dialects. Further, it meant that unlike other BASIC dialects, the interpreter needed no parentheses to identify functions; SIN x was sufficient, no SIN(x) needed (though the latter was allowed). The 4K BASIC ROM of the ZX80 had a short list of exceptions to this: the functions CHR$(), STR$(), TL$(), PEEK(), CODE(), RND(), USR() and ABS() did not have one-byte tokens but were typed in letter-by-letter and required the parentheses. They were listed as the INTEGRAL FUNCTIONS on a label above and to the right of the keyboard.

The 128K Spectrum models, the ZX Spectrum 128, +2, +3, +2A, and +2B, also stored keywords internally in one-byte code points, but used a conventional letter-by-letter BASIC input system. They also introduced two new commands:

 PLAY, which operated the 128k models' General Instrument AY-3-8910 music chip
 SPECTRUM, which switched the 128k Spectrum into a 48k Spectrum compatibility mode

The original Spanish ZX Spectrum 128 included four additional commands in Spanish, one of which was undocumented. These can be translated as:

 EDIT (to edit a line number or invoke the full screen string editor)
 RENUM (to renumber the program lines)
 DELETE (to delete program lines)
 WIDTH (to set the column width of the RS232 device, but undocumented as the code was broken)

Unlike the LEFT$(), MID$() and RIGHT$() functions used in the ubiquitous Microsoft BASIC dialects for home computers, parts of strings in Sinclair BASIC are accessed by numeric range. For example,  gives a substring starting with the 5th and ending with the 10th character of the variable a$. Thus, it is possible to replace the LEFT$() and RIGHT$() commands by simply omitting the left or right array position respectively; for example  is equivalent to LEFT$(a$,5). Further, a$(5) alone is enough to replace MID$(a$,5,1).

Variable names
Variables holding numeric values may be any length, while string and array variable names must consist of only one alphabetical character. Thus, LET a=5, LET Apples=5, LET a$="Hello", DIM a(10) and DIM a$(10) are all good, while LET Apples$="Fruit", DIM Apples(10) and DIM Apples$(10) are not.

The long variable names allowed for numeric variables can include alphanumeric characters after the first character, so LET a0=5 is allowed but not LET 0a=5. The long variable names can also include spaces, which are ignored, so LET number of apples = 5 is the same as LET numberofapples = 5

Official versions
4K BASIC for ZX80 (so named for residing in 4 KiB read-only memory (ROM)), was developed by John Grant of Nine Tiles for the ZX80. It has integer-only arithmetic.
System Commands: NEW RUN LIST LOAD SAVE
Control Statements: GOTO IF THEN GOSUB STOP RETURN FOR TO NEXT CONTINUE
Input/Output Statements: PRINT INPUT
Assignment Statement: LET
Other Statements: CLEAR CLS DIM REM RANDOMIZE POKE

 8K BASIC is the ZX81 BASIC (also available as an upgrade for the ZX80), updated with floating-point arithmetic by Steve Vickers, so named for residing in 8 KiB ROM.

 48 BASIC is the BASIC for the original 16/48 kB random-access memory (RAM) ZX Spectrum (and clones), with colour and more peripherals added by Steve Vickers and John Grant. It resides in 16 KiB ROM and began to be called 48 BASIC with the introduction of the ZX Spectrum 128 at which time the 16 kB Spectrum was no longer sold and most existing ones in use had been upgraded to 48 kB

 128 BASIC is the BASIC for the ZX Spectrum 128. It offers extra commands and uses letter-by-letter input.

 +3 BASIC is the BASIC with disk support for the ZX Spectrum +3 and +2A.

 T/S 2000 BASIC was used on the Spectrum-compatible Timex Sinclair 2068 (T/S 2068) and has the following six keywords and the ordinary Sinclair BASIC ones:
DELETE deletes BASIC program line ranges.  with the K cursor produces the command DELETE.
 FREE is a function that gives the amount of free RAM. PRINT FREE will show how much RAM is free.
 ON ERR is an error-handling function mostly used as ON ERR GO TO or ON ERR CONT.
 RESET can be used to reset the behaviour of ON ERR. It was also intended to reset peripherals.
 SOUND controls the AY-3-8192 sound chip.
 STICK is a function that gives the position of the internal joystick (Timex Sinclair 2090).

 BASIC64 by Timex of Portugal, is a software extension to allow better Basic programming with the 512×192 and dual display areas graphic modes available only on Timex Sinclair computers. This extension adds commands and does a complete memory remap to avoid the system overwriting the extended screen memory area. Two versions exist due to different memory maps - a version for TC 2048 and a version for T/S 2068 and TC 2068.
PRINT # Prints to a specific output channel.
LIST # Lists the program to a specific output channel.
CLS* Clears both display areas.
INK* Sets ink colour for both display areas
PAPER* Sets paper colour both display areas
SCREEN$ Selects the high / normal resolution modes.
PLOT* Plots a pixel and updates the drawing position. 
LINE Draws a line from the previous PLOT position, supporting arc drawing
CIRCLE* Draws a circle or oval, depending on screen mode.

Other versions, extensions, derivatives and successors

Interpreters for the ZX Spectrum family 
Several ZX Spectrum interpreters exist.
 Beta BASIC by Dr. Andy Wright, was originally a BASIC extension, but became a full interpreter.
 YS MegaBasic by Mike Leaman.
 ZebraOS by Zebra Systems in New York, a cartridge version of T/S 2000 BASIC that used the 512×192 screen mode.
 Sea Change ROM by Steve Vickers and Ian Logan, modified by Geoff Wearmouth, a replacement ROM with an enhanced Sinclair BASIC.
Gosh Wonderful by Geoff Wearmouth, a replacement ROM that fixes bugs and adds a tokenizer, stream lister, delete and renumber commands.
 OpenSE BASIC (formerly SE BASIC) by Andrew Owen, a replacement ROM with bug fixes and many enhancements including ULAplus support, published as open source in 2011

Compilers for the ZX Spectrum family 
Several ZX Spectrum compilers exist.
 HiSoft COLT Compiler (a.k.a. HiSoft COLT Integer Compiler)
 HiSoft BASIC (a.k.a. HiSoft BASIC Compiler), an integer and floating-point capable compiler
 Laser Compiler
 Softek 'IS' Integer Compiler (successor to Softek Integer Compiler)
 Softek 'FP' Full Compiler
 ZIP Compiler

Derivatives and successors for other computers 
 SuperBASIC, a much more advanced BASIC dialect introduced with the Sinclair QL personal computer, with some similarities to the earlier Sinclair BASICs
 SAM Basic, the BASIC on the SAM Coupé, generally considered a ZX Spectrum clone
 ROMU6 by Cesar and Juan Hernandez - MSX
 Spectrum 48 by Whitby Computers - Commodore 64
 Sparky eSinclair BASIC by Richard Kelsh, an operating system loosely based on ZX Spectrum BASIC - Zilog eZ80
 Sinbas by Pavel Napravnik - DOS
 Basic (and CheckBasic) by Philip Kendall - Unix
 BINSIC by Adrian McMenamin, a reimplementation in Groovy closely modelled on ZX81 BASIC - Java
 BASin by Paul Dunn, a complete Sinclair BASIC integrated development environment (IDE) based on a ZX Spectrum emulator - Windows
 SpecBAS (a.k.a. SpecOS) by Paul Dunn, an integrated development environment (IDE) providing an enhanced superset of Sinclair BASIC - Windows, Linux, Pandora, and Raspberry Pi
 ZX-Basicus by Juan-Antonio Fernández-Madrigal, a synthesizer, analyzer, optimizer, interpreter and debugger of Sinclair BASIC 48K for PCs, freely downloadable for Linux and Windows.

See also

Notes

References

Bibliography

External links 
 Sinclair ZX Spectrum BASIC Programming: The original 1982 manual by Steven Vickers (referenced above)
 Sinclair ZX81 Basic Programming: also by Vickers
 The History of Sinclair BASIC: By Andrew Owen
 Timex Computer World: Basic 64 user manual for Timex Computer 2048
 Sinclair BASIC grammar: A LL(1) grammar specification for parsing Sinclair BASIC 16/48K

ZX Spectrum
Sinclair Research
BASIC interpreters
Discontinued BASICs
BASIC programming language family