Wang offered several models of each version of the 2200 series, differing only in the amount of microcode stored in read-only memory (ROM), and thus the number of commands available in BASIC on that machine.
For instance, the B model machines differed from the base-model A by doubling the ROM and using that to store a variety of input/output and file management commands.
A notable feature was that all math used double-precision binary-coded decimal (BCD) format, which was unusual for BASICs of the era.
Not all of the instructions listed below would be available in the base model; 2200B and C added dozens of new keywords, and are outlined separately below.
[2] To aid organizing large programs, the language included a RENUMBER command.
Working with disk storage was slightly more complex, using LOAD DC F "filename", where F referred to one of a number of pre-defined drives, in this case "F"ixed.
The STOP command, typically used for debugging, allowed an optional following string that was printed out when that statement was performed.
[7] TRACE could be used to print out lines as they were run, which was often used in conjunction with the custom HALT (break) and STEP keys on the keyboard to move line-by-line through a program.
The implementation was based on the DEF FN statement followed by a single quote and then a number from 0 to 255, for instance, DEFFN' 1.
[16] Additionally, named routines in the range 0 to 31 were assigned to the similarly numbed keys on the 2200 keyboard, allowing them to be called directly with a single keypress.
The image was defined using a separate line starting with the percent sign, for instance, 180 % ##,###.## and then using that format with 190 PRINTUSING 180, N.[18] Any characters other than the formatting characters were echoed back during the print, so one could define a complete output with something like 180 % ANGLE= #.#### RADIANS.
Semicolons could not be used in the INPUT, and the cursor always remained at the end of the last printed element during entry.
[21] Multiple variables could be set to an initial value using a comma-separated list, for instance, LET A,B,C=1.
[25] Trigonometric functions included SIN, COS, TAN, ARCSIN, ARCCOS, ARCTAN, LOG, EXP and SQR.
A program using chaining would typically declare a number of variables to be common near the top of the code, perhaps COM A,B,I,A$20.
[44] The original Wang BASIC came in several versions differing in the amount of ROM-based microcode, and thus the number of keywords supported.
[47] KEYIN read a character from the keyboard without pausing, similar to INKEY$ in MS BASIC.
The NUM function was similar to LEN, but returned the length of the substring up to the first non-numeric character.
Instead, they added the CONVERT command to read strings into numbers and vice versa.
[49] Dartmouth BASIC included a CHANGE command but it was very different in purpose, in Dartmouth, CHANGE A$ TO B would produce an array of values in B, with each element containing the ASCII code for the corresponding character in A$; in this case, B would contain 49,50,51,52,46,53, the ASCII values for the characters "1234.5".
In contrast to MS's INSTR, POS could search for only a single character, not a multi-character string.
[50] Multiple codes could be inserted at once; PRINT HEX(080809) produces three characters, two backspaces and a cursor-right.
[37] A special purpose command was added to fill out a string with an initial value that's not a space.
The matrix math commands were largely identical to those found in later releases of Dartmouth BASIC.
[45] The introduction of the 2200VP's completely new instruction set required an entirely new BASIC to be written from scratch.
While backward compatibility was the primary goal, the new BASIC-2 also added a number of missing features.
The most notable change was that BASIC was no longer stored in read-only memory (ROM) and was instead loaded from disk at boot time, which allowed it to be easily patched in the field to fix bugs.
Several new pseudo-functions were added to PRINT; the AT(X,Y) function was similar in concept to TAB, but moved the cursor to the X,Y location, BOX(W,H) drew a box of the given width and height with the upper left corner at the current cursor position, and HEXOF(v) returned the hex value.
[56] On 2 April 1981, at the Hannover Fair, Wang announced a major update of the MVP series microcode.
At the time, they expected to release it in beta form in August, and for all customers in November.