of the time like CP/M or MS-DOS, which typically booted into a command line interface. If a programming language was required on these platforms, it had to be loaded separately. While some versions of Commodore BASIC included disk-specific DLOAD and DSAVE commands, the version built into the Commodore 64 lacked these, requiring the user to specify the disk drive's device number (typically 8 or 9) to the standard LOAD command, which otherwise defaulted to tape. Another omission from the Commodore 64s BASIC 2.0 was a DIRECTORY command to display a disk's contents without clearing main memory. On the 64, viewing files on a disk was implemented as loading a "program" which when listed showed the directory as a pseudo BASIC program, with the file's block size as the line number. This had the effect of overwriting the currently loaded program. Addons like the DOS Wedge overcame this by rendering the directory listing direct to screen memory. Versions and features A list of CBM BASIC versions in chronological order, with successively added features: Released versions V1.0: PET 2001 with chiclet keyboard and built-in Datassette (original PET) arrays limited to 256 elements PEEK command explicitly disabled over BASIC ROM locations above $C000 V2.0 (first release): PET 2001 with full-travel keyboard & upgrade ROMs add IEEE-488 support improved the garbage collection fix array bug Easter egg – entering WAIT6502,[number] displays MICROSOFT! an arbitrary number of times V4.0: PET/CBM 4000/8000 series (and late version PET 2001s) disk operations: DLOAD,DSAVE,COPY,SCRATCH, etc. (15 in all) disk error-channel variables: DS,DS$ greatly improved garbage-collection performance V2.0 (second release, after 4.0): VIC-20; C64 V2.2 C64GS (1990) V4+ : CBM-II series (aka B, P range) memory management: BANK more disk operations: BLOAD, BSAVE,DCLEAR formatted printing: PRINT USING,PUDEF error trapping: DISPOSE alternative branching: ELSE dynamic error handling: TRAP,RESUME,ERR$() flexible DATA read: RESTORE [linenumber] string search function: INSTR V3.5: C16/116, Plus/4 sound and graphics commands joystick input: JOY decimal ↔ hexadecimal conversion: DEC(),HEX$() structured looping: DO,LOOP,WHILE,UNTIL,EXIT function key assignment: KEY (also direct mode) program entry/editing: AUTO,DELETE,RENUMBER debugging (tracing): TRON, TROFF MLM entry command: MONITOR C(1)16, Plus/4 Easter egg – enter SYS 52650 V7.0: C128 more sound and graphics commands, including sprite handling built-in sprite editor: SPRDEF multi-statement blocks for IF THEN ELSE structures: BEGIN,BEND paddle, lightpen input: POT,PEN exclusive or function: XOR get variable address: POINTER text mode windowing: WINDOW controlled time delay: SLEEP memory management: SWAP,FETCH,STASH,FRE(1) used the 128's bank switching