fbpx
Wikipedia

BASIC09

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.[1] 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.[2]

BASIC09
Designed byMotorola
DeveloperMicroware
First appeared1980; 44 years ago (1980)
Stable release
1.1.0 / January 5, 2003; 21 years ago (2003-01-05)

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 edit

Program organization edit

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:[3]

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 procedures.[4][a]

In addition to code in the workspace, if the program invokes RUN with a procedure name that could not be found, it would then look for a disk file with the same name and load and run that file. This worked not only with BASIC09 code, but also any other executable program, including machine language files. This meant that BASIC09 could easily call system routines.[5]

In addition to RUN, other common BASIC commands likewise used names. For instance, LIST bob would print out the source code ("list") the procedure named "bob", while LIST* prints out all of the procedures currently in memory. The prettyprinted output from LIST could be redirected to a file or a printer with a shell-like notation, e.g. LIST bob >/p. One could also SAVE and LOAD procedures from storage.[6]

Structured programming edit

In addition to the organizational properties of the PROCEDURE, BASIC09 also included a number of extensions to the flow control statements found in BASIC to provide more structure. For instance, the IF statement could be used in the traditional IF...THEN format on a single line, or it could be used in a structured multi-line format:[7]

IF x>10 THEN PRINT "x is larger than 10" ELSE PRINT "x is smaller than 10" ENDIF 

FOR/NEXT loops naturally have a structured format as the NEXT can be placed on any line, but BASIC09 also added WHILE/ENDWHILE and REPEAT/UNTIL for additional clarity when working with non-indexed loops.[8] It also included the center-exit LOOP/ENDLOOP which used the EXITIF statement for testing anywhere in the loop's body.[9]

Data types edit

BASIC09 included several built-in data types. In addition to the traditional string (STRING) and 40-bit floating point (REAL) types found in most BASICs of the era, it also included the 16-bit signed INTEGER, the 8-bit unsigned BYTE, and the logical BOOLEAN type. The BOOLEAN types were not packed into bytes, a single BOOLEAN used an entire 8-bit byte to store a single value. The language provided separate bytewise boolean operators for bitwise operations on BYTEs and INTEGERs.[10] In contrast to other BASICs that also operated different base types, BASIC09 did not "decorate" the variable name to indicate the type, and instead used the DIM for definitions; for instance, DIM a,b:BOOLEAN to declare two BOOLEAN variables, or DIM c(5):INTEGER for an array of five INTEGERs.[11]

Additionally, BASIC09 included the TYPE keyword, which allowed compound types to be defined, with each "element" listed on a single line separated by semicolons. For instance:[12]

TYPE employee_record=name:STRING;number(2):INTEGER;former:BOOLEAN 

defines an employee record type named employee_record with three elements, name, number and former. The employee_record type can now be used in a definition like any other type, for instance, DIM employees(100):employee_record, which defines an array of 100 employee_record's. The elements are accessed in code using dot notation, for instance, employees(50).name="Bob".[12]

Runtime edit

Editing edit

Line numbers were used in most BASIC dialects primarily as a way to support the editor. Users would edit particular lines of code by typing a number, with the text following either adding to or replacing the lines already in memory. As every line of code had a number, this also made them suitable for indicating the target of a GOTO or GOSUB, compared to other languages like FORTRAN where a separate "line label" was used for this purpose.

BASIC09 did not normally use line numbers, so its editor had to be modified to allow the user to edit lines without referring to them by number. However, BASIC09 did not assume any sort of full-screen capability, so using cursor keys was not an option. Instead, the system had a separate editor prompt and allowed the user to move about using the + and - keys, moving forward or backward one line at a time. To insert a new line of code without a line number, the user left a blank at the start of the statement.[13]

Note that the language is case sensitive for user-provided values like procedure and variable names, but not for keywords. Keywords typed into the editor in lower case will be shown in upper case when the program is LISTed.[14] BASIC09 allowed multiple statements on a single line of code, but used the \ as a separator instead of the : used in most dialects.[15][b] This is because it used the colon in the := assignment operator, which was in addition to the normal =. := was identical in effect to =, but made the difference between assignments and comparisons more obvious.[16]

Compiler edit

The internal multipass compiler converts BASIC09 source code into a tokenized, optimized, bytecode, called I-code.[17] I-code differs from the more traditional tokenizing approach found in most BASICs in that a number of items were placed directly in memory instead of using references that then had to be looked up.[18]

For instance, in MS-based interpreters, a variable reference in code is left in string format; the variable VAR would be represented in memory by the three ASCII characters "VAR". During execution, when this variable is encountered in the code the interpreter has to look up that string in a table of variables, find the associated storage address in memory, and then finally read the value stored in that location. The table is usually constructed so that the value follows the name, to save time during the final lookup.[17]

In contrast, in I-code the address of the variable is determined in advance and the reference in code is replaced by that address. This avoids a runtime search through the variable table.[17] Other optimizations include a separate FOR/NEXT routine used when the index variable is an INTEGER, and separate INTEGER and REAL math libraries.[18][c]

For added performance, BASIC09 also included the PACK command which took a procedure name and returned an optimized version. Some of these optimizations included removing non-coding instructions like code comments and the replacement of constant expressions to a single value. For instance, PACK would recognize that LET x=x+SQR(100)/2 contains only constants on the right, and replaces it with the code x=x+5, which requires only a single operation at runtime, the addition, removing the division and square root. PACK reduced the memory footprint of the procedure and improved performance by about 10 to 30%.[19]

Lightweight runtime edit

Although it was common to run programs within the BASIC09 environment, as it was in other BASICs, BASIC09 also shipped with a separate run-only version of the code known as Runb. Runb removed the editing and debugging features of the system, and was about half the size of the full BASIC09 as a result.[20]

The purpose of Runb was primarily to run PACKed modules when called from other programs. This meant that if the user typed in the name of a BASIC09 module in the OS/9 command line, and that module has been marked as PACKed, it is opened and run by Runb instead of the BASIC09. This reduces memory footprint and improves load time.[20]

Significant features edit

  • reasonably structured control flow provisions (e.g., line numbers were mainly needed for computed GOTO, as BASIC09 did not have a switch/case statement, or computed GOSUB)
  • structure declaration (rare in any BASIC variant then; more common in later BASIC implementations)
  • intrinsic integer and Boolean data types
  • more than two significant characters in variable names (some BASICs of the time allowed only one, many Microsoft BASIC variants allowed only two)
  • procedures with local variables (indeed, all variables in BASIC09 are local to procedures) and parameter passing by reference
  • a reasonable debugger (its only significant drawback was that one could not examine the contents of fields in structures)
  • a way to interface to machine language code, which could be passed parameters using the BASIC09 calling sequence
  • automatic prettyprinting of source, which enforced a standard layout and avoided the ghastly mess that was the usual appearance of a program of any size in the interpreted BASICs of the time. Programmers normally would cram as many lines together as possible to avoid line number memory overhead—not a problem in BASIC09[21]

See also edit

  • COMAL was another BASIC-like language with structured programming constructs

Notes edit

  1. ^ The GRASS system was similar in that its BASIC-like language could be assembled from separate named procedures, but did so by leaving everything as untokenized source code, as opposed to pre-compiling as in BASIC09.
  2. ^ The colon was being used for the data type in the DIM statements.
  3. ^ Atari BASIC also worked in this way, the source code was compiled to tokens when the line was entered and any variable references replaced by a pointer to storage.

References edit

Citations edit

  1. ^ Manual 1984, p. 1.2.
  2. ^ "BASIC09". Geneslinuxbox.net:6309. Retrieved 2016-11-27.
  3. ^ Manual 1984, p. 5.1.
  4. ^ Manual 1984, p. 3.5.
  5. ^ Manual 1984, p. 9.12.
  6. ^ Manual 1984, p. 2.9.
  7. ^ Manual 1984, p. 9.4.
  8. ^ Manual 1984, p. 9.6-9.7.
  9. ^ Manual 1984, p. 9.8.
  10. ^ Manual 1984, pp. 7.2–7.6.
  11. ^ Manual 1984, p. 7.6.
  12. ^ a b Manual 1984, p. 7.8.
  13. ^ Manual 1984, p. 2.3.
  14. ^ Manual 1984, p. 2.5.
  15. ^ Manual 1984, p. 9.1.
  16. ^ Manual 1984, p. 9.2.
  17. ^ a b c Manual 1984, p. 11.1.
  18. ^ a b Manual 1984, p. 11.2.
  19. ^ Manual 1984, p. 11.3.
  20. ^ a b Manual 1984, p. D.1.
  21. ^ Basically OS-9, By Ron Voigts, 68 Micro Journal, Volume 09 Number 04, April 1984, Page 14, One of its strong features is its handling of formatted output. Other languages vary in how well they can handle the formatted output. But BASIC09 can do a very nice job of putting your lines into a form that you want

Bibliography edit

  • BASIC09 Programming Language Reference Manual (PDF). 1984.
  • "OS-9 Basic 09 - The Dragon Archive". Archive.worldofdragon.org. 2016-05-07. Retrieved 2016-11-27.

[1][2][3][4]

External links edit

  • Early OS-9 History, select content from 68 Micro Journal, September 1980, first review of OS-9 and Basic09, sent in by Tom Harmon of HHH Enterprises
  • The Official Basic09 Tour Guide, Dale L. Puckett, 1985, ISBN 0-918035-00-7, Cat No.: 26-3189
  • Package: Basic09 1.1.0 / Release Date: January 5, 2003 March 4, 2016, at the Wayback Machine, This release of Basic09 for the Tandy Color Computer 1/2/3 represents the first community-based release since the discontinuation of the CoCo in the 1980s.
  1. ^ Advert: BASIC09 has a dual personality., 68 Micro Journal, Volume 04 Number 01, Published:January 1982
  2. ^ Early OS-9 History, select content from 68 Micro Journal, December 1980, Microware changes their 6809 ad slightly. Basic09 is now called "The Basic09 Programming Language System" by Microware rather than "Motorola Basic09".
  3. ^ newsgroups: comp.os.os9, From: Colin McKay, Subject: Re: OS/2 vs. W95 and OS-9, Date: 1995/04/12, summary: Excerpts from Microware History in OS-9 Users Group Newsletter, MICROWARE NEW PRODUCT NEWSLETTER April 1979., Thank you for your inquiry about our line of 6800 family hardware and software products. We are in the process of introducing some new software so our 1979 catalog will not be ready for some time. In the interim we are presenting new product information in this newsletter. 6809 SOFTWARE. Motorola contracted Microware to produce the finest possible software for the 6809. The new software we have prepared for Motorola includes a new BASIC language system plus an operating system. This software will be available soon from Motorola and Microware.
  4. ^ About the Author, Terry Ritter, ..Software...FORMERLY: Staff Engineer, Motorola MOS Division, Microcomputer Systems Design Group, Jul. 1976 - Jan. 1981. ... Architect of structured BASIC language for 6809. Software Engineer, 1979-81 .... Originator and Supervising Project Engineer -- BASIC09, 1978-80, A structured BASIC language project, with operating system OS9 and associated specifications.

basic09, structured, basic, programming, language, dialect, developed, microware, behalf, motorola, then, motorola, 6809, released, february, 1980, primarily, used, with, operating, system, released, 1979, microware, also, released, version, 68000, microware, . 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 1 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 2 BASIC09Designed byMotorolaDeveloperMicrowareFirst appeared1980 44 years ago 1980 Stable release1 1 0 January 5 2003 21 years ago 2003 01 05 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 Contents 1 Syntax 1 1 Program organization 1 2 Structured programming 1 3 Data types 2 Runtime 2 1 Editing 2 2 Compiler 2 3 Lightweight runtime 3 Significant features 4 See also 5 Notes 6 References 6 1 Citations 6 2 Bibliography 7 External linksSyntax editProgram organization edit 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 3 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 procedures 4 a In addition to code in the workspace if the program invokes RUN with a procedure name that could not be found it would then look for a disk file with the same name and load and run that file This worked not only with BASIC09 code but also any other executable program including machine language files This meant that BASIC09 could easily call system routines 5 In addition to RUN other common BASIC commands likewise used names For instance LIST bob would print out the source code list the procedure named bob while LIST prints out all of the procedures currently in memory The prettyprinted output from LIST could be redirected to a file or a printer with a shell like notation e g LIST bob gt p One could also SAVE and LOAD procedures from storage 6 Structured programming edit In addition to the organizational properties of the PROCEDURE BASIC09 also included a number of extensions to the flow control statements found in BASIC to provide more structure For instance the IF statement could be used in the traditional IF THEN format on a single line or it could be used in a structured multi line format 7 IF x gt 10 THEN PRINT x is larger than 10 ELSE PRINT x is smaller than 10 ENDIF FOR NEXT loops naturally have a structured format as the NEXT can be placed on any line but BASIC09 also added WHILE ENDWHILE and REPEAT UNTIL for additional clarity when working with non indexed loops 8 It also included the center exit LOOP ENDLOOP which used the EXITIF statement for testing anywhere in the loop s body 9 Data types edit BASIC09 included several built in data types In addition to the traditional string STRING and 40 bit floating point REAL types found in most BASICs of the era it also included the 16 bit signed INTEGER the 8 bit unsigned BYTE and the logical BOOLEAN type The BOOLEAN types were not packed into bytes a single BOOLEAN used an entire 8 bit byte to store a single value The language provided separate bytewise boolean operators for bitwise operations on BYTEs and INTEGERs 10 In contrast to other BASICs that also operated different base types BASIC09 did not decorate the variable name to indicate the type and instead used the DIM for definitions for instance DIM a b BOOLEAN to declare two BOOLEAN variables or DIM c 5 INTEGER for an array of five INTEGERs 11 Additionally BASIC09 included the TYPE keyword which allowed compound types to be defined with each element listed on a single line separated by semicolons For instance 12 TYPE employee record name STRING number 2 INTEGER former BOOLEAN defines an employee record type named employee record with three elements name number and former The employee record type can now be used in a definition like any other type for instance DIM employees 100 employee record which defines an array of 100 employee record s The elements are accessed in code using dot notation for instance employees 50 name Bob 12 Runtime editEditing edit Line numbers were used in most BASIC dialects primarily as a way to support the editor Users would edit particular lines of code by typing a number with the text following either adding to or replacing the lines already in memory As every line of code had a number this also made them suitable for indicating the target of a GOTO or GOSUB compared to other languages like FORTRAN where a separate line label was used for this purpose BASIC09 did not normally use line numbers so its editor had to be modified to allow the user to edit lines without referring to them by number However BASIC09 did not assume any sort of full screen capability so using cursor keys was not an option Instead the system had a separate editor prompt and allowed the user to move about using the and keys moving forward or backward one line at a time To insert a new line of code without a line number the user left a blank at the start of the statement 13 Note that the language is case sensitive for user provided values like procedure and variable names but not for keywords Keywords typed into the editor in lower case will be shown in upper case when the program is LISTed 14 BASIC09 allowed multiple statements on a single line of code but used the as a separator instead of the used in most dialects 15 b This is because it used the colon in the assignment operator which was in addition to the normal was identical in effect to but made the difference between assignments and comparisons more obvious 16 Compiler edit The internal multipass compiler converts BASIC09 source code into a tokenized optimized bytecode called I code 17 I code differs from the more traditional tokenizing approach found in most BASICs in that a number of items were placed directly in memory instead of using references that then had to be looked up 18 For instance in MS based interpreters a variable reference in code is left in string format the variable VAR would be represented in memory by the three ASCII characters VAR During execution when this variable is encountered in the code the interpreter has to look up that string in a table of variables find the associated storage address in memory and then finally read the value stored in that location The table is usually constructed so that the value follows the name to save time during the final lookup 17 In contrast in I code the address of the variable is determined in advance and the reference in code is replaced by that address This avoids a runtime search through the variable table 17 Other optimizations include a separate FOR NEXT routine used when the index variable is an INTEGER and separate INTEGER and REAL math libraries 18 c For added performance BASIC09 also included the PACK command which took a procedure name and returned an optimized version Some of these optimizations included removing non coding instructions like code comments and the replacement of constant expressions to a single value For instance PACK would recognize that LET x x SQR 100 2 contains only constants on the right and replaces it with the code x x 5 which requires only a single operation at runtime the addition removing the division and square root PACK reduced the memory footprint of the procedure and improved performance by about 10 to 30 19 Lightweight runtime edit Although it was common to run programs within the BASIC09 environment as it was in other BASICs BASIC09 also shipped with a separate run only version of the code known as Runb Runb removed the editing and debugging features of the system and was about half the size of the full BASIC09 as a result 20 The purpose of Runb was primarily to run PACKed modules when called from other programs This meant that if the user typed in the name of a BASIC09 module in the OS 9 command line and that module has been marked as PACKed it is opened and run by Runb instead of the BASIC09 This reduces memory footprint and improves load time 20 Significant features editreasonably structured control flow provisions e g line numbers were mainly needed for computed a href GOTO html class mw redirect title GOTO GOTO a as BASIC09 did not have a switch case statement or computed a href GOSUB html class mw redirect title GOSUB GOSUB a structure declaration rare in any BASIC variant then more common in later BASIC implementations intrinsic integer and Boolean data types more than two significant characters in variable names some BASICs of the time allowed only one many Microsoft BASIC variants allowed only two procedures with local variables indeed all variables in BASIC09 are local to procedures and parameter passing by reference a reasonable debugger its only significant drawback was that one could not examine the contents of fields in structures a way to interface to machine language code which could be passed parameters using the BASIC09 calling sequence automatic prettyprinting of source which enforced a standard layout and avoided the ghastly mess that was the usual appearance of a program of any size in the interpreted BASICs of the time Programmers normally would cram as many lines together as possible to avoid line number memory overhead not a problem in BASIC09 21 See also editCOMAL was another BASIC like language with structured programming constructsNotes edit The GRASS system was similar in that its BASIC like language could be assembled from separate named procedures but did so by leaving everything as untokenized source code as opposed to pre compiling as in BASIC09 The colon was being used for the data type in the DIM statements Atari BASIC also worked in this way the source code was compiled to tokens when the line was entered and any variable references replaced by a pointer to storage References editCitations edit Manual 1984 p 1 2 BASIC09 Geneslinuxbox net 6309 Retrieved 2016 11 27 Manual 1984 p 5 1 Manual 1984 p 3 5 Manual 1984 p 9 12 Manual 1984 p 2 9 Manual 1984 p 9 4 Manual 1984 p 9 6 9 7 Manual 1984 p 9 8 Manual 1984 pp 7 2 7 6 Manual 1984 p 7 6 a b Manual 1984 p 7 8 Manual 1984 p 2 3 Manual 1984 p 2 5 Manual 1984 p 9 1 Manual 1984 p 9 2 a b c Manual 1984 p 11 1 a b Manual 1984 p 11 2 Manual 1984 p 11 3 a b Manual 1984 p D 1 Basically OS 9 By Ron Voigts 68 Micro Journal Volume 09 Number 04 April 1984 Page 14 One of its strong features is its handling of formatted output Other languages vary in how well they can handle the formatted output But BASIC09 can do a very nice job of putting your lines into a form that you want Bibliography edit BASIC09 Programming Language Reference Manual PDF 1984 OS 9 Basic 09 The Dragon Archive Archive worldofdragon org 2016 05 07 Retrieved 2016 11 27 1 2 3 4 External links editEarly OS 9 History select content from 68 Micro Journal September 1980 first review of OS 9 and Basic09 sent in by Tom Harmon of HHH Enterprises The Official Basic09 Tour Guide Dale L Puckett 1985 ISBN 0 918035 00 7 Cat No 26 3189 Package Basic09 1 1 0 Release Date January 5 2003 Archived March 4 2016 at the Wayback Machine This release of Basic09 for the Tandy Color Computer 1 2 3 represents the first community based release since the discontinuation of the CoCo in the 1980s Advert BASIC09 has a dual personality 68 Micro Journal Volume 04 Number 01 Published January 1982 Early OS 9 History select content from 68 Micro Journal December 1980 Microware changes their 6809 ad slightly Basic09 is now called The Basic09 Programming Language System by Microware rather than Motorola Basic09 newsgroups comp os os9 From Colin McKay Subject Re OS 2 vs W95 and OS 9 Date 1995 04 12 summary Excerpts from Microware History in OS 9 Users Group Newsletter MICROWARE NEW PRODUCT NEWSLETTER April 1979 Thank you for your inquiry about our line of 6800 family hardware and software products We are in the process of introducing some new software so our 1979 catalog will not be ready for some time In the interim we are presenting new product information in this newsletter 6809 SOFTWARE Motorola contracted Microware to produce the finest possible software for the 6809 The new software we have prepared for Motorola includes a new BASIC language system plus an operating system This software will be available soon from Motorola and Microware About the Author Terry Ritter Software FORMERLY Staff Engineer Motorola MOS Division Microcomputer Systems Design Group Jul 1976 Jan 1981 Architect of structured BASIC language for 6809 Software Engineer 1979 81 Originator and Supervising Project Engineer BASIC09 1978 80 A structured BASIC language project with operating system OS9 and associated specifications Retrieved from https en wikipedia org w index php title BASIC09 amp oldid 1180740898, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.