Galaksija BASIC

Galaksija BASIC was the BASIC interpreter of the Galaksija build-it-yourself home computer from Yugoslavia. While being partially based on code taken from TRS-80 Level 1 BASIC, which the creator believed to have been a Microsoft BASIC, the extensive modifications of Galaksija BASIC&mdash;such as to include rudimentary array support, video generation code (as the CPU itself did it in absence of dedicated video circuitry) and generally improvements to the programming language&mdash;is said to have left not much more than flow-control and floating point code remaining from the original.

The core implementation of the interpreter was fully contained in the 4 KiB ROM "A" or "1". The computer's original mainboard had a reserved slot for an extension ROM "B" or "2" that added more commands and features such as a built-in Zilog Z80 assembler.

ROM "A"/"1" symbols and keywords
The core implementation, in ROM "A" or "1", contained 3 special symbols and 32 keywords:
 * ! : begins a comment (equivalent of standard BASIC REM command)
 * # : Equivalent of standard BASIC DATA statement
 * & : prefix for hex numbers
 * ARR$(n) : Allocates an array of strings, like DIM, but can allocate only array with name A$
 * BYTE : serves as PEEK when used as a function (e.g. PRINT BYTE(11123)) and POKE when used as a command (e.g. BYTE 11123,123).
 * CALL n : Calls BASIC subroutine as GOSUB in most other BASICs (e.g. CALL 100+4*X)
 * CHR$(n) : converts an ASCII numeric code into a corresponding character (string)
 * DOT x, y : draws (command) or inspects (function) a pixel at given coordinates (0<=x<=63, 0<=y<=47).
 * DOT * : displays the clock or time controlled by content of Y$ variable. Not in standard ROM
 * EDIT n : causes specified program line to be edited
 * ELSE : standard part of IF-ELSE construct (Galaksija did not use THEN)
 * EQ : compare alphanumeric values X$ and Y$
 * FOR : standard FOR loop
 * GOTO : standard GOTO command
 * HOME : equivalent of standard BASIC CLS command - clears the screen
 * HOME n : protects n characters from the top of the screen from being scrolled away
 * IF : standard part of IF-ELSE construct (Galaksija did not use THEN)
 * INPUT : user entry of variable
 * INT(n) : a function that returns the greatest integer value equal to or lesser than n
 * KEY(n) : test whether a particular keyboard key is pressed
 * LIST : lists the program. Optional numeric argument specifies the first line number to begin listing with.
 * MEM : returns memory consumption data (need details here)
 * NEW : clears the current BASIC program
 * NEW n : clears BASIC program and moves beginning of BASIC area
 * NEXT : standard terminator of FOR loop
 * OLD : loads a program from tape
 * OLD n : loads program to different address
 * PTR : Returns address of the variable
 * PRINT : Printing numeric or string expression.
 * RETURN : Return from BASIC subroutine
 * RND : function (takes no arguments) that returns a random number between 0 and 1.
 * RUN : runs (executes) BASIC program. Optional numeric argument specifies the line number to begin execution with.
 * SAVE : saves a program to tape. Optional two arguments specify memory range to be saved (need details here).
 * STEP : standard part of FOR loop
 * STOP : stops execution of BASIC program
 * TAKE : replacement for READ and RESTORE. If the parameter is variable name, acts as READ, if it is number, acts as RESTORE
 * UNDOT x, y : "undraws" (resets) at specified coordinates (see DOT)
 * UNDOT * : Stops the clock, not part of ROM
 * USR : Calls machine code subroutine
 * WORD : Double byte PEEK and POKE

ROM "B"/"2" additional symbols and keywords
The extended BASIC features, in ROM "B" or "2", contained one extra reserved symbol and 22 extra keywords:
 * /LABEL
 * ABS(x)
 * ARCTG(x)
 * COS(x) COSD(x)
 * DEL
 * DUMP
 * EXP(x)
 * INP(x)
 * LDUMP
 * LLIST
 * LN(x)
 * LPRINT
 * OUT
 * PI
 * POW(x,y)
 * REN
 * SIN(x), SIND(x)
 * SQR(x)
 * TG(x) TGD(x)
 * TG(x) TGD(x)