IBM licensed Microsoft BASIC for the PC despite already having its own version for the company's mainframes. Don Estridge said, "Microsoft BASIC had hundreds of thousands of users around the world. How are you going to argue with that?"
IBM Cassette BASIC
IBM Cassette BASIC came in 32 kilobytes (KB) of read-only memory (ROM), separate from the 8 KB BIOS ROM of the original IBM PC, and did not require an operating system to run. Cassette BASIC provided the default user interface invoked by the BIOS through INT 18h if there was no floppy disk drive installed, or if the boot code did not find a bootable floppy disk at power up. The name Cassette BASIC came from its use of cassette tapes rather than floppy disks to store programs and data. Cassette BASIC was built into the ROMs of the original PC and XT, and early models in the PS/2 line. It only supported loading and saving programs to the IBM cassette tape interface, which was unavailable on models after the original Model 5150. The entry-level version of the 5150 came with just 16 KB of random-access memory (RAM), which was sufficient to run Cassette BASIC. However, Cassette BASIC was rarely used because few PCs were sold without a disk drive, and most were sold with PC DOS and sufficient RAM to at least run Disk BASIC—many could run Advanced BASIC as well. There were three versions of Cassette BASIC: C1.00 (found on the early IBM PCs with 16k-64k motherboards), C1.10 (found on all later IBM PCs, XTs, ATs, and PS/2s), and C1.20 (found on the PCjr).
IBM Disk BASIC
IBM Disk BASIC (BASIC.COM) was included in the original IBM PC DOS. Because it uses the 32 KB Cassette BASIC ROM, BASIC.COM did not run on even highly compatible PC clones such as the Compaq Portable. The name Disk BASIC came from its use of floppy disks as well as cassette tapes to store programs and data. Disk-based code corrected errata in the ROM-resident code and added floppy disk and serial port support.
Disk BASIC could be identified by its use of the letter D preceding the version number. It added disk support and some features lacking in Cassette BASIC, but did not include the extended sound/graphics functions of BASICA. The primary purpose of Disk BASIC was as a "lite" version for IBM PCs with only 48K of memory: BASIC.COM would then have about 23K free for user code, whereas BASICA would only have about 17K. By 1986, all new PCs shipped with at least 256k and DOS versions after 3.00 reduced Disk BASIC to only a small stub that called BASICA.COM for compatibility with batch files. Even with all this excess RAM, BASIC would still only allocate and manage just under 61K for user programs (whether it was Cassette BASIC, BASIC.COM or BASICA).
IBM Advanced BASIC
IBM Advanced BASIC (BASICA.COM) was also included in the original IBM PC DOS, and required the ROM-resident code of Cassette BASIC. It added functions such as diskette file access, storing programs on disk, monophonic sound using the PC's built-in speaker, graphics functions to set and clear pixels, draw lines and circles, and set colors, and event handling for communications and joystick presses. BASICA would not run on non-IBM computers (even so-called "100% compatible" machines) or later IBM models, since those lack the needed ROM BASIC.
BASICA versions were the same as their respective DOS, beginning with v1.00 and ending with v3.30. The early versions of BASICA did not support subdirectories and some graphics commands functioned slightly differently. As an example, if the LINE statement was used to draw lines that trailed off-screen, BASIC would merely intersect them with the nearest adjacent line while in BASIC 2.x and up, they went off the screen and did not intersect. The PAINT command in BASIC 1.x begins filling at the coordinate specified and expands outward in alternating up and down directions while in BASIC 2.x it fills everything below the starting coordinate and then after finishing, everything above it. BASIC 1.x's PAINT command also makes use of the system stack for storage and when filling in complex areas, it was possible to produce an OVERFLOW error. To remedy this, the CLEAR statement can be used to expand BASIC's stack (128 bytes is the default size). BASIC 2.x does not use the stack when PAINTing and thus is free of this problem.
Compaq BASIC 1.13 was the first standalone BASIC for the PC (that did not require Cassette BASIC to run) as well as the only version of BASIC besides IBM BASICA 1.00 and 1.10 to use FCBs and include the original LINE statement with intersecting lines (the PAINT statement in Compaq BASIC 1.13 worked like in all later versions of BASICA/GW-BASIC, using the new fill algorithm and no stack).
Early versions of PC DOS included several sample BASIC programs demonstrating the capabilities of the PC, including the BASICA game DONKEY.BAS.
Microsoft offered for sale a Basic compiler that could compile basic source code to run much faster than the interpreters, disk BASIC and Advanced BASIC.
GW-BASIC, launched in 1983, was a disk-based Microsoft product distributed with non-IBM MS-DOS computers, and supported all the graphics modes and features of BASICA on computers that did not have the IBM Cassette BASIC.
GW-BASIC is identical to BASICA, with the exception of including the Cassette BASIC code in the program, thus allowing it to run on non-IBM computers and later IBM models that lack Cassette BASIC in ROM.
A ROM cartridge version of BASIC was only available on the IBM PCjr (shipped 1984) and supported the additional graphics modes and sound capabilities possible on that platform. It is a superset of advanced BASIC. Cartridge BASIC can only operate within the first 128k of memory on the PCjr and will not work with expansion RAM (e.g. the DEF SEG function cannot be used to point to memory segments above &H1FF0)
Cartridge BASIC is activated by typing BASICA at the DOS prompt. Conversely, IBM BASICA versions 2.1 and up will refuse to run if it detects a PCjr (but can be patched to work around this).
Cassette BASIC loads when a PC or PCjr is booted without a bootable disk or cartridge. Disk BASIC and Advanced BASIC load when their command name (BASIC and BASICA respectively) is typed at a DOS command prompt (except PCjr, which activates Cartridge BASIC instead), with some optional parameters to control allocation of memory. When loaded, a sign-on identification message displays the program version number, and a full-screen text editor starts (see images, right). The function keys are assigned common commands, which display at the bottom of the screen. Commands may be typed in to load or save programs, and expressions can be typed in and executed in direct (immediate) mode. If a line of input starts with a number, the language system stores the following line of text as part of program source, allowing a programmer to enter in an entire program line by line, entering line numbers before each statement. When listed on screen, lines are displayed in order of increasing line number. Changes can be made to a displayed line of program source code by moving the cursor to the line with the cursor keys, and typing over the on-screen text. Program source is stored internally in a tokenized form, where keywords are replaced with a single byte token, to save space and execution time. Programs may be saved in compact tokenized form, or optionally saved as DOS text ASCII files that can be viewed and edited with other programs. Like most other DOS applications, IBM BASIC is a text-mode program and has no features for windows, icons, mouse support, or cut and paste editing. Successors
The successor to BASICA for MS-DOS and PC DOS versions was QBasic, launched in 1991, which was a stripped-down version of the Microsoft QuickBASIC compiler: QBasic was an interpreter and could not compile source files while QuickBASIC could compile and save the programs in the .EXE executable file format.