Basic
IBM contracted Microsoft to provide the Basic interpreter for the Personal Computer. The version in the ROM is essentially Microsoft BASIC-80, version 5.x, without the statements associated with disk file access. To the best of my knowledge, it is the most extensive Basic offered in any personal computer's ROM. It is certainly large; most small computers are usually delivered with 16kb of ROM containing Basic and a small monitor.
The systems I used for my evaluation all had 64kb of RAM installed. Imagine my surprise when Basic announced it had 61404 bytes free! In effect, I was working with a 104kb system.
But Cassette Basic is not the end of the story. Two other versions of Basic are available for systems which include one or more diskette drives and for which the Personal Computer Disk Operating System (DOS) has been purchased. Disk Basic adds the disk file statements and makes the Basic equivalent to BASIC-80. Advanced Basic adds advanced graphics, music, and some special extensions for event trapping that allow real-time programs to be written using Basic! Best of all, these Basic extensions are just that ‑‑ extensions. The kernel Basic interpreter in ROM is still used and the only memory used by the extensions is that which they themselves need. Table 1 shows the sizes of the three Basic systems and the amount of user memory they leave available in a 64kb system. If the main memory in the system is extended to 96kb or above, all versions of Basic will have a maximum of about 60kb of available user memory.
There are several special features of the IBM Personal Computer Basic. A very good full screen editor is provided and behaves intuitively. (By this I mean that depression of the cursor control and editing keys produces a logical and expected effect.) Basic is able to handle communications at speeds up to 9600 bits/second. The ALT key in conjunction with the letter keys can be used to automatically generate Basic keywords, speeding entry of programs. Finally, both Disk and Advanced Basic are memory resident and do not require a disk once loaded.
The December 1980 issue of Creative Computing features a comparative evaluation of Basics (page 70). Table 2 lists the same "defined system characteristics" for the IBM system.
I do have one complaint about the three Basics. The DATE$ and TIME$ are not in Cassette Basic but become available in Disk Basic. These are relatively simple features, and they have their use even in minimal systems. I feel somewhat the same way about the advanced graphics and music functions. These features are very useful in entertainment programs, which are most likely run on smaller configurations. Expanding a minimal system to include Advanced Basic requires an upgrade to 48kb of memory ($180), one diskette drive ($790), and DOS($40). For the consumer who has invested $1600 in a machine with limited third-party software support, $1090 is a significant next step.
IBM has seen to a competent and powerful implementation of Basic. The availability of almost all of BASIC-80 in ROM is a strong feature. The amount of available memory is a close second.
Table 3 shows which Basic statements are included with each version of the IBM Personal Computer Basic.
Next: Graphics

| Table 1: Basic System Memory Utilization - 64K Systems | ||||
|---|---|---|---|---|
| Basic Version | Incremental Memory | Total Memory Required | Memory Available | |
| IBM | Observed | |||
| Cassette | 4.0 | 60.0 | 61.404 | |
| Disk Basic | ||||
| DOS | 12.0 | |||
| Disk Basic | 8.0 | |||
| Total | 20.0 | 24.0 | 40.0 | 41.156 |
| Advanced Basic | 5.0 | 29.0 | 35.0 | 35.707 |
| Note: In all versions, a maximum 64K workspace is supported, of which about 4K is required for interpreter overhead. | ||||
| Table 2: Defined System Characteristics of the IBM Personal Computer Basic | ||
|---|---|---|
| Characteristic | Implementation | Verified |
| Name length | Unlimited (40 significant) | |
| Integer arithmetic | yes | x |
| Multi-statement functions | no | |
| Function Recursion | yes | x |
| Multi-statement lines | yes | x |
| Syntax checking | when RUN | x |
| String arrays | yes, 256 characters deep | |
| Messages | full phrase | x |
| Statement #'s | 0 to 65535 | |
| Dimension default | 11 elements | x |
| Float precision, # digits | 7 single; 17 double | |
| Float exponent | 38 | |
| Float size, bytes | 4 single; 8 double | |
| RENUM command | yes | x |
| Nested IF | yes | x |
| Max subroutine depth | none | |
| Link to machine language | yes | |
| Formatted output (PRING USING) | yes | x |
| Max number array dimensions | 255 | |
| Break procedure | CRTL-Break | x |
| Number of string functions | 13 | x |
| PEEK/POKE | yes | x |
| CHAINing and COMMON | yes | |
| Error trapping | yes | x |
| Random I/O | yes | |
| Limit of nested loops | none | |
| Number of keywords | 158 | |
| Trace features | yes | x |