# Microsoft Basic 1.0

BASIC 1.0 is the standard BASIC language for Thomson computers (MO5, TO7, etc.), which is the reference for the entire range. This is an implementation of Microsoft BASIC (BASIC-69). It was used to introduce children from France to programming in the 1980s (see Computing for All, a 1985 French government plan to introduce computers to the country's 11 million pupils). Three languages were mainly taught: LSE, BASIC and LOGO. School textbooks programs were given in BASIC 1.0 for Thomson and sometimes in ExelBasic for the Exelvision EXL 100.
The first version came with the TO7 computer, released in 1982. On the MO5 (released in 1984 but with smaller ROM), the instruction set is reduced and the double precision is not implemented, so that the interpreter fits in only 12 KB of ROM, instead of 16 KB on the TO7.
An upgraded version was produced under the name of BASIC 128, for the TO7-70, TO9, MO5NR and MO6. It included commands for disc operations and other new instructions.
On the TO8/8D and TO9+, an even more upgraded version under the name of BASIC 512 was provided.

## Keywords

BASIC 1.0 interpreter recognizes the usual commands such as FOR..NEXT, GOSUB..RETURN, IF..THEN..ELSE, and DATA / READ / RESTORE statements. Advanced instructions like ON..GOTO and ON..GOSUB were also possible.
* ? - Alias to PRINT
* ' - Alias to REM
* ATTRB - Character attributes
* BOX (x1,y1)-(x2,y2) - Draws a rectangle (the top left pixel is (0,0)
* BOXF (x1,y1)-(x2,y2),color - Fills a rectangle with the given color (optional, if not given use the current pen color). Negative colors lead to filling with the requested color as the background one.
* CLS - Clear screen
* COLOR foreground, background - Change pen colors (parameters are optional)
* CONSOLE
* DELETE
* END - Ends program execution
* FOR v=s TO e STEP n - FOR loop, incrementing v by n each time until it reaches e. The STEP is optional (default is 1) and can be negative.
* GOTO line - Jump to program line
* IF a THEN statement ELSE statement - Conditions (the statement can be just a line number)
* INPUT “message”;variable1,variable2 - Set variables to user-entered values (comma separated). A ? is printed after the message and before reading the values from the user.
* LINE (x1,y1)-(x2,y2) - Draws a line (first point is optional, current cursor position is used: LINE -(x2,y2))
* LIST line - List the program in memory (parameter is optional, if missing the whole program is listed)
* LOCATE x,y - Move the cursor
* NEW - New program, remove current one from memory
* NEXT v - Closes FOR loop.
* PLAY s$ - Plays music. The string is made of notes DO,RE,MI,FA,SO,LA,SI (with # and b modifiers), octave changes (O1-O5), note duration changes (L1-L96), silences (P), tempo changes (T1-T256), attack settings (A0-A255). Spaces are ignored and can be used for readability
* PRINT value - Prints a value (if the value is suffixed with a ; insert a tabulation after it. else goes to next line)
* PRINT USING
* PSET(x,y) - Set a pixel
* REM - Comments (REMark). Anything following this on the line is ignored.
* RUN - run the program
* SCREEN foreground,background,border - Change colors for whole screen
* COS(v)
* INT(v)
* INSTR
* LEFT$(s$,n) - Get a substring of the N first chars of S
* LEN(s$)
* MID$
* RIGHT$(s$,n) - Get a substring of the N last chars of S
* RND - Random value between 0 and 1
* SIN(v)
* STR$
* VAL
* + - Addition, string concatenation
* MOD
* @ - Integer division
* = - Assignment, equality