SyntaxIBM BASICA and GW-BASIC are direct ports of Microsoft's BASIC-80 (also known as MBASIC) designed for 8080/Z80 machines, but added features specifically for the IBM PC hardware. Common features of BASIC-80 and BASICA/GW-BASIC include:
- CLS command to clear the screen
- Double-precision variables
- True integer support
- PRINT USING statement for formatted display output
- LPRINT for outputting to printers
- WHILE...WEND loops
- The ability to save programs in three formats (ordinary tokenized binary, ASCII, or a "protected" token format that cannot be LISTed)
- "Ok" as the BASIC prompt
- DEFINT statement to set all variables beginning with the specified characters as one type, eliminating the need to put type indicators in front of them
- INKEY$ function to read key presses
- An advanced editor which included statements for renumbering program lines and deleting them in blocks
- Hexadecimal number support (performed by preceding numbers with &H)
- The REM statement can be abbreviated as '
- Statements that have quoted text (e.g. PRINT) do not require a second quote mark at the end unless other arguments follow
- IN/OUT instructions for I/O
- Error trapping features
MBASIC programs not using PEEK/POKE statements would run under GWBASIC. BASICA added a large number of features for the IBM PC such as sound, graphics, and memory commands.
Microsoft did not offer a generic version of MS-DOS until v3.20 in 1986 and before then, all variants of the OS were OEM ones. Depending on the OEM, BASIC was distributed as either BASICA.EXE or GWBASIC.EXE. The former should not be confused with IBM BASICA, which always came as a .COM file. Some variants of BASIC had extra features to support a particular machine (for example, the AT&T and Tandy versions of DOS included a special GWBASIC that supported their enhanced sound and graphics capabilities).
The initial version of GW-BASIC was the one included with Compaq DOS 1.13 (released with the Compaq Portable in 1983) and was analogous to IBM BASICA 1.10. It used the CP/M-derived file control blocks for disk access and did not support subdirectories. Later versions added this feature and improved graphics and other capabilities.
GW-BASIC 3.20 (1986) added EGA graphics support (no version of BASICA or GWBASIC had VGA support) and was in effect the last new version released before it was superseded by QBASIC.
Buyers of Hercules Graphics Cards received a special version of GWBASIC on the card's utility disk that was called HBASIC and which added support for its 720x348 monochrome graphics (other versions of BASICA/GWBASIC only allowed graphics on Hercules cards if SIMCGA was loaded)
GW-BASIC has a command line-based integrated development environment (IDE) based on Dartmouth BASIC. Using the cursor movement keys, any line displayed on screen can be edited. It also includes function key shortcuts at the bottom of the screen. Like other early microcomputer versions of BASIC, GW-BASIC lacked many of the structures needed for structured programming such as local variables, and GW-BASIC programs executed relatively slowly, because it was an interpreted programming language. All program lines must be numbered; all non-numbered lines are considered to be commands in direct mode to be executed immediately. Program source files are normally saved in binary compressed format with tokens replacing commands, with an option to save in ASCII text form.
The GW-BASIC command-line environment has commands to
RUN,LOAD,SAVE,LISTthe current program, or quit to the operating
SYSTEM; these commands can also be used as program statements. There is little support for structured programming in GW-BASIC. All
IF/THEN/ELSEconditional statements must be written on one line, although
WHILE/WENDstatements may group multiple lines. Functions can only be defined using the single line
DEF FNf(x)=<mathematical function of x> statement (e.g.,
DEF FNLOG(base,number)=LOG(number)/LOG(base)). The data type of variables can be specified with a character at the end of the variable name:
A$is a string of characters,
A%is an integer, etc. Groups of variables can also be set to default types based on the initial letter of their name by use of the
DEFINT, DEFSTR, etc., statements. The default type for undeclared variables not identified by such typing statements, is single-precision floating point.
GW-BASIC allowed use of joystick and light pen input devices. GW-BASIC can read from and write to files and COM ports; it can also do event trapping for ports. Since the cassette port interface of the original IBM PC was never implemented on compatibles, cassette operations are not supported. GW-BASIC can play simple music using the
PLAYstatement, needing a string of notes represented in a music macro language (e.g.
PLAY "edcdeee2dfedc4"). More low-level control is possible with the
SOUNDstatement, which takes the arguments of a frequency in hertz and a length in clock ticks for the standard internal PC speaker in IBM machines. Consequently sound is limited to single channel beeps and whistles as befits a 'business' machine. Home-based PCs such as the Tandy 1000 allowed up to three channels of sound for the