BASIC09 is a structured BASIC programming language dialect developed by Microware on behalf of Motorola for the then-new Motorola 6809 CPU and released in February 1980. It is primarily used with the OS-9 operating system, released in 1979. Microware also released a version for OS-9/68k on the 68000 as Microware BASIC. In contrast to typical BASICs of the era, BASIC09 includes a multi-pass compiler that produces compact bytecode known as I-code. I-code replaces a number of data structures found in other BASICs with direct pointers to code and values, speeding performance. Users can further compile code using the PACK command, at which point it can be called directly by OS-9 and operated as native code. In the case of PACKed code, a cut-down version of the BASIC09 runtime system is used, Runb, further improving memory footprint and load time. The language includes a number of structured programming additions, including local variables, the ability to ignore line numbers in favor of named routines, user-defined structures, and several distinct base data types including 16-bit and 8-bit (byte) integers, in addition to floating point and strings. Syntax Program organization A key difference between BASIC09 and conventional BASICs of the era, like the canonical Microsoft BASIC, is the addition of the PROCEDURE structure which created separately executable blocks of code. Code in a PROCEDURE had more in common with complete programs in other BASICs, including the variables being local to the code, and their ability to be executed in a stand-alone fashion. PROCEDUREs were called by name using the RUN command, and could include variables for function-call semantics; for instance, RUN add(4,7) calls a procedure named add that takes two parameters. Parameters were imported into the procedure using the PARAM keyword, in this example PARAM a,b: PROCEDURE add PARAM a,b PRINT a+b A side-effect of the use of named procedures is that the resulting memory workspace is, in effect, its own namespace. In this respect, the BASIC09 system appears to the user to be a directory of callable programs. This contrasts with typical BASICs, where only one program is available at a given time and the construction of larger programs calling library-like code generally requires the source code to be copied and pasted between separate programs. In BASIC09, the user can LOAD procedures by name into the workspace and then call them from their own code to construct larger programs from the separately stored