The Structure of I-Code
The 'I' in I-Code stands for Intermediate. Intermediate code is code that is a step between interpreted source statements and fully compiled machine code. Typically, intermediate code uses tokens to represent the instructions to be executed. Basic09 I-Code goes a step further by re-arranging the source code instructions in post-fix notation (also known as Reverse Polish Notation) order.
The tokens used by Basic09 are a single byte ranging from $00 to $FF. The table below defines the tokens.
I-Code Token List
| Token | Name | Used In | Description |
|---|---|---|---|
| 00 | GLOBAL | Reserved | Global Variable |
| 01 | PARAM | Editor | |
| 01 | READ | I-Code | File Mode |
| 02 | TYPE | Editor | |
| 02 | WRITE | I-Code | File Mode |
| 03 | DIM | Editor | |
| 03 | UPDATE | I-Code | File Mode |
| 04 | DATA | I-Code/Editor | |
| 04 | EXEC | I-Code | File Mode |
| 05 | STOP | I-Code/Editor | |
| 05 | READ+EXEC | I-Code | File Mode |
| 06 | BYE | I-Code/Editor | |
| 06 | WRITE+EXEC | I-Code | File Mode |
| 07 | TRON | I-Code/Editor | |
| 07 | UPDATE+EXEC | I-Code | File Mode |
| 08 | TROFF | I-Code/Editor | |
| 09 | PAUSE | I-Code/Editor | |
| 0A | DEG | I-Code/Editor | |
| 0B | RAD | I-Code/Editor | |
| 0C | RETURN | I-Code/Editor | |
| 0D | LET | I-Code/Editor | |
| 0E | <cva> | I-Code/Editor | Complex Variable Assignment |
| 0F | POKE | I-Code/Editor | |
| 10 | IF | I-Code/Editor | |
| 11 | ELSE | I-Code/Editor | |
| 12 | ENDIF | I-Code/Editor | |
| 13 | FOR | I-Code/Editor | |
| 14 | NEXT | I-Code/Editor | |
| 15 | WHILE | I-Code/Editor | |
| 16 | ENDWHILE | I-Code/Editor | |
| 17 | REPEAT | I-Code/Editor | |
| 18 | UNTIL | I-Code/Editor | |
| 19 | LOOP | I-Code/Editor | |
| 1A | ENDLOOP | I-Code/Editor | |
| 1B | EXITIF | I-Code/Editor | |
| 1C | ENDEXIT | I-Code/Editor | |
| 1D | ON | I-Code/Editor | |
| 1E | ERROR | I-Code/Editor | |
| 1F | GOTO | Editor | Unbound |
| 20 | GOTO | I-Code/Editor | Bound |
| 21 | GOSUB | Editor | Unbound |
| 22 | GOSUB | I-Code/Editor | Bound |
| 23 | RUN | I-Code/Editor | |
| 24 | KILL | I-Code/Editor | |
| 25 | INPUT | I-Code/Editor | |
| 26 | I-Code/Editor | ? Becomes PRINT in the Editor | |
| 27 | CHD | I-Code/Editor | |
| 28 | CHX | I-Code/Editor | |
| 29 | CREATE | I-Code/Editor | |
| 2A | OPEN | I-Code/Editor | |
| 2B | SEEK | I-Code/Editor | |
| 2C | READ | I-Code/Editor | |
| 2D | WRITE | I-Code/Editor | |
| 2E | GET | I-Code/Editor | |
| 2F | PUT | I-Code/Editor | |
| 30 | CLOSE | I-Code/Editor | |
| 31 | RESTORE | I-Code/Editor | |
| 32 | DELETE | I-Code/Editor | |
| 33 | CHAIN | I-Code/Editor | |
| 34 | SHELL | I-Code/Editor | |
| 35 | BASE 0 | I-Code/Editor | |
| 36 | BASE 1 | I-Code/Editor | |
| 37 | REM | Editor | ! Becomes REM in the Editor |
| 38 | (* | Editor | |
| 39 | END | I-Code/Editor | |
| 3A | <ulrf> | I-Code/Editor | Unbound Line Reference |
| 3B | <blrf> | I-Code/Editor | Bound Line Reference |
| 3C | <dex> | I-Code/Editor | Direct Execution |
| 3D | PROCEDURE | Editor | Procedure start |
| 3D | <erl> | Editor/Debug | Error Line |
| 3E | \ | I-Code/Editor | End-of-Instruction, Continue Line |
| 3F | <eol> | I-Code/Editor | End-of-Instruction and Line |
| 40 | BYTE | Editor | |
| 40 | fbyte | I-Code/Editor | VDT Entry, Field Byte Variable |
| 41 | INTEGER | Editor | |
| 41 | finteger | I-Code/Editor | VDT Entry, Field Integer Variable |
| 42 | REAL | Editor | |
| 42 | freal | I-Code/Editor | VDT Entry, Field Real Variable |
| 43 | BOOLEAN | Editor | |
| 43 | fboolean | I-Code/Editor | VDT Entry, Field Boolean Variable |
| 44 | STRING | Editor | |
| 44 | fstring | I-Code/Editor | VDT Entry, Field String Variable |
| 45 | THEN | I-Code/Editor | |
| 45 | frecord | I-Code/Editor | VDT Entry, Field Record Variable |
| 46 | TO | I-Code/Editor | |
| 47 | STEP | I-Code/Editor | |
| 48 | DO | I-Code/Editor | |
| 48 | fvectorb | I-Code/Editor | VDT Entry, Field 1 Dimensional Byte Array |
| 49 | USING | I-Code/Editor | |
| 49 | fvectori | I-Code/Editor | VDT Entry, Field 1 Dimensional Integer Array |
| 4A | : | I-Code/Editor | File Mode Operator |
| 4A | fvectorr | I-Code/Editor | VDT Entry, Field 1 Dimensional Real Array |
| 4B | , | I-Code/Editor | Comma Separator |
| 4B | fvectorl | I-Code/Editor | VDT Entry, Field 1 Dimensional Boolean Array |
| 4C | : | I-Code/Editor | Colon |
| 4C | fvectors | I-Code/Editor | VDT Entry, Field 1 Dimensional String Array |
| 4D | ( | I-Code/Editor | Left Parenthesis |
| 4D | fvectoru | I-Code/Editor | VDT Entry, Field 1 Dimensional Record Array |
| 4E | ) | I-Code/Editor | Right Parenthesis |
| 4F | [ | I-Code/Editor | Left Bracket |
| 50 | ] | I-Code/Editor | Right Bracket |
| 50 | ftableb | I-Code/Editor | VDT Entry, Field 2 Dimensional Byte Array |
| 51 | ; | I-Code/Editor | Semi-colon |
| 51 | ftablei | I-Code/Editor | VDT Entry, Field 2 Dimensional Integer Array |
| 52 | := | I-Code/Editor | Assignment Operator |
| 52 | ftabler | I-Code/Editor | VDT Entry, Field 2 Dimensional Real Array |
| 53 | = | I-Code/Editor | Assignment Operator |
| 53 | ftablel | I-Code/Editor | VDT Entry, Field 2 Dimensional Boolean Array |
| 54 | # | I-Code/Editor | Channel (Path) Number Operator |
| 54 | ftables | I-Code/Editor | VDT Entry, Field 2 Dimensional String Array |
| 55 | <ivgt> | I-Code/Editor | Invisible GOTO (used with IF) |
| 55 | ftableu | I-Code/Editor | VDT Entry, Field 2 Dimensional Record Array |
| 56 | Unused | ||
| 57 | Unused | ||
| 58 | fmatrixb | I-Code/Editor | VDT Entry, Field 3 Dimensional Byte Array |
| 59 | fmatrixi | I-Code/Editor | VDT Entry, Field 3 Dimensional Integer Array |
| 5A | fmatrixr | I-Code/Editor | VDT Entry, Field 3 Dimensional Real Array |
| 5B | fmatrixl | I-Code/Editor | VDT Entry, Field 3 Dimensional Boolean Array |
| 5C | fmatrixs | I-Code/Editor | VDT Entry, Field 3 Dimensional String Array |
| 5D | fmatrixu | I-Code/Editor | VDT Entry, Field 3 Dimensional Record Array |
| 5E | Unused | ||
| 5F | Unused | ||
| 60 | byte | I-Code/Editor | VDT entry, Byte Variable |
| 61 | integer | I-Code/Editor | VDT entry, Integer Variable |
| 62 | real | I-Code/Editor | VDT entry, Real Variable |
| 63 | boolean | I-Code/Editor | VDT entry, Boolean Variable |
| 64 | string | I-Code/Editor | VDT entry, String Variable |
| 65 | record | I-Code/Editor | VDT entry, Record Variable |
| 66 | Unused | ||
| 67 | Unused | ||
| 68 | vectorb | I-Code/Editor | VDT Entry, 1 Dimensional Byte Array |
| 69 | vectori | I-Code/Editor | VDT Entry, 1 Dimensional Integer Array |
| 6A | vectorr | I-Code/Editor | VDT Entry, 1 Dimensional Real Array |
| 6B | vectorl | I-Code/Editor | VDT Entry, 1 Dimensional Boolean Array |
| 6C | vectors | I-Code/Editor | VDT Entry, 1 Dimensional String Array |
| 6D | vectoru | I-Code/Editor | VDT Entry, 1 Dimensional Record Array |
| 6E | Unused | ||
| 6F | Unused | ||
| 70 | tableb | I-Code/Editor | VDT Entry, 2 Dimensional Byte Array |
| 71 | tablei | I-Code/Editor | VDT Entry, 2 Dimensional Integer Array |
| 72 | tabler | I-Code/Editor | VDT Entry, 2 Dimensional Real Array |
| 73 | tablel | I-Code/Editor | VDT Entry, 2 Dimensional Boolean Array |
| 74 | tables | I-Code/Editor | VDT Entry, 2 Dimensional String Array |
| 75 | tableu | I-Code/Editor | VDT Entry, 2 Dimensional Record Array |
| 76 | Unused | ||
| 77 | Unused | ||
| 78 | matrixb | I-Code/Editor | VDT Entry, 3 Dimensional Byte Array |
| 79 | matrixi | I-Code/Editor | VDT Entry, 3 Dimensional Integer Array |
| 7A | matrixr | I-Code/Editor | VDT Entry, 3 Dimensional Real Array |
| 7B | matrixl | I-Code/Editor | VDT Entry, 3 Dimensional Boolean Array |
| 7C | matrixs | I-Code/Editor | VDT Entry, 3 Dimensional String Array |
| 7D | matrixu | I-Code/Editor | VDT Entry, 3 Dimensional Record Array |
| 7E | Unused | ||
| 7F | Unused | ||
| 80 | byte | I-Code/Editor | Instruction, Simple Byte Variable |
| 80 | pbyte | I-Code/Editor | VDT Entry, Parameter Byte Variable |
| 80 | DIR | I-Code | File Mode |
| 81 | integer | I-Code/Editor | Instruction, Simple Integer Variable |
| 81 | pinteger | I-Code/Editor | VDT Entry, Parameter Integer Variable |
| 81 | READ+DIR | I-Code | File Mode |
| 82 | real | I-Code/Editor | Instruction, Simple Real Variable |
| 82 | preal | I-Code/Editor | VDT Entry, Parameter Real Variable |
| 82 | WRITE+DIR | I-Code | File Mode |
| 83 | boolean | I-Code/Editor | Instruction, Simple Boolean Variable |
| 83 | pboolean | I-Code/Editor | VDT Entry, Parameter Boolean Variable |
| 83 | UPDATE+DIR | I-Code | File Mode |
| 84 | string | I-Code/Editor | Instruction, Simple String Variable |
| 84 | pstring | I-Code/Editor | VDT Entry, Parameter String Variable |
| 84 | EXEC+DIR | I-Code | File Mode |
| 85 | record/p | I-Code/Editor | Instruction, Record, Parameter (Simple/Record) Variable |
| 85 | vector/p | I-Code/Editor | Instruction, 1 Dimensional Array, Parameter 1 Dimensional Array Variable |
| 85 | table/p | I-Code/Editor | Instruction, 2 Dimensional Array, Parameter 2 Dimensional Array Variable |
| 85 | matrix/p | I-Code/Editor | Instruction, 3 Dimensional Array, Parameter 3 Dimensional Array Variable |
| 85 | precord | I-Code/Editor | VDT Entry, Parameter Record Variable |
| 85 | READ+EXEC+DIR | I-Code | File Mode |
| 86 | vector/p | I-Code/Editor | Instruction, 1 Dimensional Array |
| 86 | WRITE+EXEC+DIR | I-Code | File Mode |
| 87 | table/p | I-Code/Editor | Instruction, 2 Dimensional Array |
| 87 | UPDATE+EXEC+DIR | I-Code | File Mode |
| 88 | matrix/p | I-Code/Editor | Instruction, 3 Dimensional Array |
| 88 | pvectorb | I-Code/Editor | VDT Entry, Parameter 1 Dimensional Byte Array |
| 89 | varm | I-Code/Editor | Instruction, Simple/Record Variable Mirror |
| 89 | pvectori | I-Code/Editor | VDT Entry, Parameter 1 Dimensional Integer Array |
| 8A | fvectorm | I-Code/Editor | VDT Entry, Field 1 Dimensional Array Mirror |
| 8A | pvectorr | I-Code/Editor | VDT Entry, Parameter 1 Dimensional Real Array |
| 8B | ftablem | I-Code/Editor | VDT Entry, Field 2 Dimensional Array Mirror |
| 8B | pvectorl | I-Code/Editor | VDT Entry, Parameter 1 Dimensional Boolean Array |
| 8C | fmatrixm | I-Code/Editor | VDT Entry, Field 3 Dimensional Array Mirror |
| 8C | pvectors | I-Code/Editor | VDT Entry, Parameter 1 Dimensional String Array |
| 8D | <blit> | I-Code/Editor | BYTE Constant (Literal) |
| 8D | pvectoru | I-Code/Editor | VDT Entry, Parameter 1 Dimensional Record Array |
| 8E | <ilit> | I-Code/Editor | INTEGER Constant (Literal) |
| 8F | <rlit> | I-Code/Editor | REAL Constant (Literal) |
| 90 | " | I-Code/Editor | STRING Constant - Beginning (Literal) |
| 90 | ptableb | I-Code/Editor | VDT Entry, Parameter 2 Dimensional Byte Array |
| 91 | $ | I-Code/Editor | Hexadecimal Constant (Literal) |
| 91 | ptablei | I-Code/Editor | VDT Entry, Parameter 2 Dimensional Integer Array |
| 92 | ADDR() | I-Code/Editor | |
| 92 | ptabler | I-Code/Editor | VDT Entry, Parameter 2 Dimensional Real Array |
| 93 | <addr> | I-Code/Editor | Second Byte of ADDR() |
| 93 | ptablel | I-Code/Editor | VDT Entry, Parameter 2 Dimensional Boolean Array |
| 94 | SIZE() | I-Code/Editor | |
| 94 | ptables | I-Code/Editor | VDT Entry, Parameter 2 Dimensional String Array |
| 95 | <size> | I-Code/Editor | Second Byte of SIZE() |
| 95 | ptableu | I-Code/Editor | VDT Entry, Parameter 2 Dimensional Record Array |
| 96 | POS() | I-Code/Editor | |
| 97 | ERR() | I-Code/Editor | |
| 98 | MOD() | I-Code/Editor | Byte/Integer |
| 98 | pmatrixb | I-Code/Editor | VDT Entry, Parameter 3 Dimensional Byte Array |
| 99 | MOD() | I-Code/Editor | Real |
| 99 | pmatrixi | I-Code/Editor | VDT Entry, Parameter 3 Dimensional Integer Array |
| 9A | RND() | I-Code/Editor | |
| 9A | pmatrixr | I-Code/Editor | VDT Entry, Parameter 3 Dimensional Real Array |
| 9B | PI | I-Code/Editor | |
| 9B | pmatrixl | I-Code/Editor | VDT Entry, Parameter 3 Dimensional Boolean Array |
| 9C | SUBSTR() | I-Code/Editor | |
| 9C | pmatrixs | I-Code/Editor | VDT Entry, Parameter 3 Dimensional String Array |
| 9D | SGN() | I-Code/Editor | |
| 9D | pmatrixu | I-Code/Editor | VDT Entry, Parameter 3 Dimensional Record Array |
| 9E | SGN() | I-Code/Editor | |
| 9F | SIN() | I-Code/Editor | |
| A0 | COS() | I-Code/Editor | |
| A0 | <subr> | I-Code/Editor | Called Subroutine Name |
| A1 | TAN() | I-Code/Editor | |
| A2 | ASN() | I-Code/Editor | |
| A3 | ACS() | I-Code/Editor | |
| A4 | ATN() | I-Code/Editor | |
| A5 | EXP() | I-Code/Editor | |
| A6 | ABS() | I-Code/Editor | |
| A7 | ABS() | I-Code/Editor | |
| A8 | LOG() | I-Code/Editor | |
| A9 | LOG10() | I-Code/Editor | |
| AA | SQRT() | I-Code/Editor | |
| AB | SQR() | I-Code/Editor | Becomes SQRT() in the Code |
| INT() |I-Code/Editor |Byte/Integer | |||
| INT() |I-Code/Editor |Real | |||
| FIX() |I-Code/Editor |Byte/Integer | |||
| FIX() |I-Code/Editor |Real | |||
| FLOAT() |I-Code/Editor |Byte/Integer | |||
| FLOAT() |I-Code/Editor |Real | |||
| SQ() |I-Code/Editor |Byte/Integer | |||
| SQ() |I-Code/Editor |Real | |||
| PEEK() |I-Code/Editor | | |||
| LNOT() |I-Code/Editor |Logical NOT | |||
| VAL() |I-Code/Editor | | |||
| LEN() |I-Code/Editor | | |||
| ASC() |I-Code/Editor | | |||
| LAND() |I-Code/Editor |Logical AND | |||
| LOR() |I-Code/Editor |Logical OR | |||
| LXOR() |I-Code/Editor |Logical XOR | |||
| TRUE |I-Code/Editor | | |||
| FALSE |I-Code/Editor | | |||
| EOF() |I-Code/Editor | | |||
| TRIM$() |I-Code/Editor | | |||
| MID$() |I-Code/Editor | | |||
| LEFT$() |I-Code/Editor | | |||
| RIGHT$() |I-Code/Editor | | |||
| CHR$() |I-Code/Editor | | |||
| STR$() |I-Code/Editor |Byte/Integer | |||
| STR$() |I-Code/Editor |Real | |||
| DATE$ |I-Code/Editor | | |||
| TAB |I-Code/Editor | | |||
| <ritc> |I-Code/Editor |Real->Byte/Integer Type Conversion | |||
| <fix1> |I-Code/Editor |Fix Top of Stack | |||
| <fix2> |I-Code/Editor |Fix Second on Stack | |||
| <fix3> |I-Code/Editor |Fix Third on Stack | |||
| <irtc> |I-Code/Editor |Byte/Integer->Real Type Conversion | |||
| <flt1> |I-Code/Editor |Float Top of Stack | |||
| <flt2> |I-Code/Editor |Float Second on Stack | |||
| NOT() |I-Code/Editor | | |||
| - |I-Code/Editor |(Monadic) Negate Byte/Integer | |||
| - |I-Code/Editor |(Monadic) Negate Real | |||
| AND |I-Code/Editor | | |||
| OR |I-Code/Editor | | |||
| XOR |I-Code/Editor | | |||
| > |I-Code/Editor |Byte/Integer Comparison Operator | |||
| > |I-Code/Editor |Real Comparison Operator | |||
| > |I-Code/Editor |String Comparison Operator | |||
| < |I-Code/Editor |Byte/Integer Comparison Operator | |||
| < |I-Code/Editor |Real Comparison Operator | |||
| < |I-Code/Editor |String Comparison Operator | |||
| <> |I-Code/Editor |Byte/Integer Comparison Operator >< is converted to <> in the code | |||
| <> |I-Code/Editor |Real Comparison Operator >< is converted to <> in the code | |||
| <> |I-Code/Editor |String Comparison Operator >< is converted to <> in the code | |||
| <> |I-Code/Editor |Boolean Comparison Operator >< is converted to <> in the code | |||
| = |I-Code/Editor |Byte/Integer Comparison Operator | |||
| = |I-Code/Editor |Real Comparison Operator | |||
| = |I-Code/Editor |String Comparison Operator | |||
| = |I-Code/Editor |Boolean Comparison Operator | |||
| >= |I-Code/Editor |Byte/Integer Greater/Equal Operator | |||
| >= |I-Code/Editor |Real Greater/Equal Operator | |||
| >= |I-Code/Editor |String Greater/Equal Operator | |||
| <= |I-Code/Editor |Byte/Integer Less/Equal Operator | |||
| <= |I-Code/Editor |Real Less/Equal Operator | |||
| <= |I-Code/Editor |String Less/Equal Operator | |||
| + |I-Code/Editor |Byte/Integer Add Operator | |||
| + |I-Code/Editor |Real Add Operator | |||
| + |I-Code/Editor |String Concantenate Operator | |||
| - |I-Code/Editor |Byte/Integer Subtract Operator (Dyadic) | |||
| - |I-Code/Editor |Real Subtract Operator (Dyadic) | |||
| * |I-Code/Editor |Byte/Integer Multiply Operator | |||
| * |I-Code/Editor |Real Multiply Operator | |||
| / |I-Code/Editor |Byte/Integer Divide Operator | |||
| / |I-Code/Editor |Real Divide Operator | |||
| ^ |I-Code/Editor |Exponent Operator | |||
| ** |I-Code/Editor |Exponent Operator | |||
| varm/p |I-Code/Editor |Instruction, Simple/Record, Parameter Variable Mirror | |||
| vectorm/p |I-Code/Editor |Instruction, 1 Dimensional Array, Parameter 1 Dimensional Array Mirror | |||
| tablem/p |I-Code/Editor |Instruction, 2 Dimensional Array, Parameter 2 Dimensional Array Mirror | |||
| matrixm/p |I-Code/Editor |Instruction, 3 Dimensional Array, Parameter 3 Dimensional Array Mirror | |||
| field |I-Code/Editor |Instruction, Field Variable | |||
| UPDATE |Editor | | |||
| fvector |I-Code/Editor |Instruction, Field 1 Dimensional Array | |||
| EXEC |Editor | | |||
| ftable |I-Code/Editor |Instruction, Field 2 Dimensional Array | |||
| DIR |Editor | | |||
| fmatrix |I-Code/Editor |Instruction, Field 3 Dimensional Array | |||
| |Unused | | |||
| |Unused | | |||
| |Unused | | |||
| |Unused | | |||
| |Unused | | |||
| " |I-Code/Editor |STRING Constant - Terminator |