From 459ef1b197aa54562a3c83f53485beabd7070291 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Mon, 5 Feb 2018 21:51:30 -0500 Subject: [PATCH 1/2] Implemented SELECT, CASE, and DEFAULT statements --- c02.c | 5 +- c02.exe | Bin 60416 -> 61440 bytes c02.ppx | 138 +++++++++++++++++++++++++++++++++++++++++++++----------- c02.tag | Bin 120832 -> 131072 bytes label.c | 19 ++++++-- label.h | 2 +- stmnt.c | 56 ++++++++++++++++++++--- 7 files changed, 179 insertions(+), 41 deletions(-) diff --git a/c02.c b/c02.c index 8143a29..b667bc3 100644 --- a/c02.c +++ b/c02.c @@ -54,10 +54,7 @@ void pword() getwrd(); ACMNT(word); DEBUG("Parsing Word '%s'\n", word); - if (xstmnt[0]) - if (wordis(xstmnt)) - xstmnt[0] = 0; - else + if (xstmnt[0] && !wordis(xstmnt)) ERROR("Expected '%s' statement\n", xstmnt, EXIT_FAILURE); if (!pmodfr() && !ptype(MTNONE)) pstmnt(); //Parse Statement diff --git a/c02.exe b/c02.exe index 1d79bbf101b49357a9f7f4bd6249930f4354ac88..fddfa3176b06386b521d199795e65dbe749304f2 100644 GIT binary patch delta 12552 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 S#=rfOr0@<|)2?3&wEqVX=B54s delta 11907 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 - - - - - -8 - -31 - 952 - 422 - 1 - 1 - - - - - - - 52 - 52 - 760 - 362 - 0 - 0 - - - - + 78 78 @@ -37,7 +12,116 @@ 0 + + + 0 + 0 + 952 + 310 + 0 + 0 + + + + + 26 + 26 + 978 + 336 + 0 + 0 + + + + + 52 + 52 + 760 + 362 + 0 + 0 + + + + + 52 + 52 + 1004 + 362 + 0 + 0 + + + + + 78 + 78 + 1030 + 388 + 0 + 0 + + + + + 104 + 104 + 1056 + 414 + 0 + 0 + + + + + 130 + 130 + 1082 + 440 + 0 + 0 + + - + + + -8 + -31 + 952 + 422 + 1 + 1 + + + + + 26 + 26 + 978 + 336 + 0 + 0 + + + + + 104 + 104 + 812 + 414 + 0 + 0 + + + + + 130 + 130 + 838 + 440 + 0 + 0 + + diff --git a/c02.tag b/c02.tag index 8b02ab8c5e50837bad48676a2059ab28ec1c3984..29801896219ff48b81ea352ba09cd03d8f0f4a54 100644 GIT binary patch literal 131072 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≠wM5%b>%52-^EC(A$6CzN>6c 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%0DOdJT-&QoWSVd zlWOb`C!7{abyCmeh2Sq4p_>UVg%Bv{(5wjIV-1qUOIz5t1Wc&E#C%^W{hP_@pZRClT$^Q>a_)mBM literal 120832 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%0DqqjeXGk!>(7d)qIB`)9+t_D(pL8V%$rlXpR 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 Date: Mon, 5 Feb 2018 22:40:00 -0500 Subject: [PATCH 2/2] Added SELECT/CASE/DEFAULT to documentation --- doc/c02.txt | 1296 +++++++++++++++++++++++++----------------------- doc/c02vsC.txt | 68 +-- 2 files changed, 706 insertions(+), 658 deletions(-) diff --git a/doc/c02.txt b/doc/c02.txt index f678518..1ca0a4f 100644 --- a/doc/c02.txt +++ b/doc/c02.txt @@ -1,628 +1,668 @@ -INTRODUCTION - -C02 is a simple C-syntax language designed to generate highly optimized -code for the 6502 microprocessor. The C02 specification is a highly -specific subset of the C standard with some modifications and extensions - -PURPOSE - -Why create a whole new language, particularly one with severe restrictions, -when there are already full-featured C compilers available? It can be -argued that standard C is a poor fit for processors like the 6502. The C -was language designed to translate directly to machine language instructions -whenever possible. This works well on 32-bit processors, but requires either -a byte-code interpreter or the generation of complex code on a typical -8-bit processor. C02, on the other hand, has been designed to translate -directly to 6502 machine language instructions. - -The C02 language and compiler were designed with two goals in mind. - -The first goal is the ability to target machines with low memory: a few -kilobytes of RAM (assuming the generated object code is to be loaded into -and ran from RAM), or as little as 128 bytes of RAM and 2 kilobytes of ROM -(assuming the object code is to be run from a ROM or PROM). - -The compiler is agnostic with regard to system calls and library functions. -Calculations and comparisons are done with 8 bit precision. Intermediate -results, array indexing, and function calls use the 6502 internal registers. -While this results in compiled code with virtually no overhead, it severely -restricts the syntax of the language. - -The second goal is to port the compiler to C02 code so that it may be -compiled by itself and run on any 6502 based machine with sufficient memory -and appropriate peripherals. This slightly restricts the implementation of -code structures. - -SOURCE AND OUTPUT FILES - -C02 source code files are denoted with the .c02 extension. The compiler -reads the source code file, processes it, and generates an assembly -language file with the same name as the source code file, but with -the .asm extension instead of the .c02 extension. This assembly language -file is then assembled to create the final object code file. - -Note: The default implementation of the compiler creates assembly -language code formatted for the DASM assembler. The generation of the -assembly language is parameterized, so it may be easily changed to -work with other assemblers. - -COMMENTS - -The parser recognizes both C style and C++ style comments. - -C style comments begin with /* and end at next */. Nested C style comments -are not supported. - -C++ style comments begin with // and end at the next newline. C++ style -comments my be nested inside C style comments. - -DIRECTIVES - -Directives are special instructions to the compiler. They do not directy -generate compiled code. A directive is denoted by a leading # character. -C02 currently supports only one directive. - -The #include directive causes the compiler to read and process and external -file. In most cases, #include directives will be used with libraries of -function calls, but they can also be used to modularize the code that makes -up a program. - -An #include directive is followed by the file name to be included. This -file name may be surrounded with either a < and > character, or by two " -characters. In the former case, the compiler looks for the file in an -implementation specific library directory (the default being ./include), -while in the latter case, the compiler looks for the file in the current -working directory. Two file types are currently supported. - -Header files are denoted by the .h02 extension. A header file is used to -provide the compiler with the information necessary to use machine -language system and/or library routines written in assembly language, -and consists of comments and declarations. The declarations in a header -file added to the symbol table, but do not directly generate code. After -a header file has been processed, the compiler reads and process a -assembly language file with the same name as the header file, but with -the .a02 extension instead of the .h02 extension. - -The compiler does not currently generate any assembler required -pseudo-operators, such as the specification of the target processor, -or the starting address of the assembled object code. Therefore, at least -one header file, with an accompanying assembly language file is needed -in order to successfully assemble the compiler generated code. Details -on the structure and implementation of a typical header file can be -found in the file header.txt. - -Assembly language files are denoted by the .asm extension. When the -compiler processes an assembly language file, it simply inserts the contents -of the file into the generated code. - -Note: Unlike standard C and C++, which use a preprocessor to process -directives, the C02 compiler processes directives directly. - -CONSTANTS - -A constant represents a value between 0 and 255. Values may be written as -a number (binary, decimal, osir hexadecimal) or a character literal. - -A binary number consists of a % followed by eight binary digits (0 or 1). - -A decimal number consists of one to three decimal digits (0 through 9). - -A hexadecimal number consists of a $ followed by two hexadecimal digits -(0 throuth 9 or A through F). - -A character literals consists of a single character surrounded by ' symbols. -A ' character may be specified by escaping it with a \. - -Examples: - &0101010 Binary Number - 123 Decimal Number - $FF Hexadecimal Number - 'A' Character Literal - '\'' Escaped Character Literal - -STRINGS - -A string is a consecutive series of characters terminated by an ASCII null -character (a byte with the value 0). - -A string literal is written as up to 255 printable characters. prefixed and -suffixed with " characters. - -SYMBOLS - -A symbol consists of an alphabetic character followed by zero to five -alphanumeric characters. Four types of symbols are supported: labels, -simple variables, variable arrays, and functions. - -A label specifies a target point for a goto statement. A label is written -as a symbol suffixed by a : character. - -A simple variable represents a single byte of memory. A variable is written -as a symbol without a suffix. - -A variable array represents a block of up to 256 continuous bytes in -memory. An Array reference are written as a symbol suffixed a [ character, - -index, and ] character. The lowest index of an array is 0, and the highest -index is one less than the number of bytes in the array. There is no bounds -checking on arrays: referencing an element beyond the end of the array will -access indeterminate memory locations. - -A function is a subroutine that receives multiple values as arguments and -optionally returns a value. A function is written as a symbol suffixed with -a ( character, up to three arguments separated by commas, and a ) character, - -The special symbols A, X, and Y represent the 6502 registers with the same -names. Registers may only be used in specific circumstances (which are -detailed in the following text). Various C02 statements modify registers -as they are processed, care should be taken when using them. However, when -used properly, register references can increase the efficiency of compiled -code. - -STATEMENTS - -Statements include declarations, assignments, stand-alone function calls, -and control structures. Most statements are suffixed with ; characters, -but some may be followed with program blocks. - -BLOCKS - -A program block is a series of statements surrounded by the { and } -characters. They may only be used with function definitions and control -structures. - -DECLARATIONS - -A declaration statement consists of type keyword (char or void) followed -by one or more variable names and optional definitions, or a single -function name and optional function block. - -Variables may only be of type char and all variable declaration statements -are suffixed with a ; character. - -A simple variable declaration may include an initial value definition in -the form of an = character and constant after the variable name. - -A variable array may be declares in one of two ways: the variable name -suffixed with a [ character, a constant specifying the upper bound of -the array, and a ] character; or a variable name followed by an = character -and string literal or series of constants separated by , characters and -surrounded by { or } characters. - -Variables are initialized at compile time. If a variable is changed during -execution, it will not be reinitialized unless the compiled program is -reloaded into memory. - -Examples: - char c; //Defines variable c - char i, j; //Defines variables i and j - char r[7]; //Defines 8 byte array r - char s = "string"; //Defines 7 byte array s initialized to "string" - char m = {1,2,3}; //Defines 3 byte array m initialized to 1, 2, and 3 - -A function declaration consists of the function name suffixed with a ( -character, followed zero to three comma separated simple variables and -a ) character. A function declaration terminated with a ; character is -called a forward declaration and does not generate any code, while one -followed by a program block creates the specified function. Functions of -type char explicitly return a value (using a return statement), while -functions of type void do not. - -Examples: - void myfunc(); //Forward declaration of function myfunc - char min(tmp1, tmp2) {if (tmp1 < tmp2) return tmp1; else return tmp2;} - -Note: Like all variables, function parameters are global. They must be -declared prior to the function decaration, and retain there values after -the function call. Although functions may be called recursively, they are -not re-entrant. Allocation of variables and functions is implementation -dependent, they could be placed in any part of memory and in any order. -The default behavior is to place variables directly after the program code, -including them as part of the generated object file. - -The return value of a function is passed through the A register. A return -statement with an explicit expression will simply process that expression -(which leaves the result in the A register) before returning. A return -statement without an expression (including an implicit return) will, by -default, return the value of the last processed expression. - -EXPRESSIONS - -An expression is a sseries of one or more terms separated by operators. - -The first term in an expression may be a function call, subscripted array -element, simple variable, constant, or register (A, X, or Y). An expression -may be preceded with a - character, in which case the first term is assumed -to be the constant 0. - -Additional terms are limited to subscripted array elements, simple variables -and constants. - -Operators: - + — Add the following value. - - — Subtract the following value. - & — Bitwise AND with the following value. - | — Bitwise OR with the following value. - ^ — Bitwise Exclusive OR with the following value. - -Arithmetic operators have no precedence. All operations are performed in -left to right order. Expressions may not contain parenthesis. - -Note: the character ! may be substituted for | on systems that do not -support the latter character. No escaping is necessary because a ! may -not appear anywere a | would. - -After an expression has been evaluated, the A register will contain the -result. - -EVALUATIONS - -An evaluation is a construct which generates either TRUE or FALSE condition. -It may be an expression, a comparison, or a test. - -A stand-alone expression evaluates to TRUE if the result is non-zero, or -FALSE if the result is zero. - -A comparison consists of an expression, a comparator, and a term (subscripted -array element, simple variable, or constant). - -Comparators: - = — Evaluates to TRUE if expression is equal to term - < — Evaluates to TRUE if expression is less than term - <= — Evaluates to TRUE if expression is less than or equal to term - > — Evaluates to TRUE if expression is greater than term - >= — Evaluates to TRUE if expression is greater than or equal to term - <> — Evaluates to TRUE if expression is not equal to term - -The parser considers == equivalent to a single =. The operator <> -was chosen instead of the usual != because it simplified the parser design. - -A test consists of an expression followed by a test-op. - -Test-Ops: - :+ — Evaluates to TRUE if the result of the expression is positive - :- — Evaluates to TRUE if the result of the expression is negative - -A negative value is one in which the high bit is a 1 (128 — 255), while a -positive value is one in which the high bit is a 0 (0 — 127). The primary -purpose of test operators is to check the results of functions that return -a positive value upon succesful completion and a negative value if an error -was encounters. They compile into smaller code than would be generated -using the equivalent comparison operators. - -A comparison may be preceded by negation operator (a ! character), which -reverses the meaning of the entire comparison. For example, - ! expr -evaluates to TRUE if expr is zero, or FALSE if it is non-zero; while - ! expr = term -evaluates to TRUE if expr and term are not equal, or FALSE if they are; and - ! expr :+ -evaluates to TRUE if expr is negative, or FALSE if it is positive - -Note: Evaluations are compiled directly into 6502 conditional branch -instructions, which precludes their use inside expressions. Standalone -expressions and test-ops generate a single branch instruction, and -therefore result in the most efficient code. Comparisons generate a -compare instruction and one or two branch instructions (=. <. >=, and <> -generate one, while <= and > generate two). A preceding negation operator -will switch the number of branch instructions used in a comparison, but -otherwise does not change the size of the generated code. - -ARRAY SUBSCRIPTS - -Individual elements of an array are accessed using subscript notation. -Subscripted array elements may be used as a terms in an expression, as well -as the target variable in an assignments. They are written as the variable -name suffixed with a [ character, followed by an index, and the ] character. -The index may be a constant, a simple variable, or a register (A, X or Y). - -Examples: - z = r[i]; //Store the value from element i of array r into variable z - r[0] = z; //Store the value of variable z into the first element of r - -Note: After a subscripted array reference, the 6502 X register will contain -the value of the index (unless the register Y was used as the index, in -which X register is not changed). - -FUNCTION CALLS - -A function call may be used as a stand-alone statement, or as the first -term in an expression. A function call consists of the function name -appended with a ( character, followed by zero to three arguments separated -with commas, and a closing ) character. - -The first argument of a function call may be an expression, address, or -string (see below). - -The second argument may be a term (subscripted array element, simple -variable, or constant), address, or string, - -The third argument may only be a simple variable or constant. - -If the first or second argument is an address or string, then no more -arguments may be passed. - -To pass the address of a variable or array into a function, precede the -variable name with the address-of operator &. To pass a string, simply -specify the string as the argument. - -Examples: - c = getchr(); //Get character from keyboard - n = abs(b+c-d); //Return the absolute value of result of expression - m = min(r[i], r[j]); //Return lesser of to array elements - l = strlen(&s); //Return the length of string s - p = strchr(c, &s); //Return position of character c in string s - putstr("Hello World"); //Write "Hello World" to screen - -Note: This particular argument passing convention has been chosen because -of the 6502's limited number of registers and stack processing instructions. -When an address is passed, the high byte is stored in the Y register and -the low byte in the X register. If a string is passed, it is turned into -anonymous array, and it's address is passed in the Y and X registers. -Otherwise, the first argument is passed in the A register, the second in -the Y register, and the third in the X register. - -EXTENDED PARAMETER PASSING - -To enable direct calling of machine language routines that that do not match -the built-in parameter passing convention, C02 supports the non-standard -statements push, pop, and inline. - -The push statement is used to push arguments onto the machine stack prior -to a function call. When using a push statement, it is followed by one or -more arguments, separated by commas, and terminated with a semi-colon. An -argument may be an expression, in which case the single byte result is -pushed onto the stack, or it may be an address or string, in which case the -address is pushed onto the string, high byte first and low byte second. - -The pop statement is likewise used to pop arguments off of the machine -stack after a function call. When using a pop statement, it is followed -with one or more simple variables, separated by commas, and terminated -with a semicolon. If any of the arguments are to be discarded, an asterisk -can be specified instead of a variable name. - -The number of arguments pushed and popped may or may not be the same, -depending on how the machine language routine manipulates the stack pointer. - -Examples: - push d,r; mult(); pop p; - push x1,y1,x2,y2; rect(); pop *,*,*,*; - push &s, "tail"; strcat(); - -Note: The push and pop statements could also be used to manipulate the -stack inside or separate from a function, but this should be done with -care. - -The inline statement is used when calling machine language routines that -expect constant byte or word values immediately following the 6502 JSR -instruction. A routine of this type will adjust the return address to the -point directly after the last instruction. When using the inline statement, -it is followed by one or more arguments, separated by commas, and -terminated with a semicolon. The arguments may be constants, addresses, -or strings. - -Examples; - iprint(); inline "Hello World"; //Print "Hello World" - irect(); inline 10,10,100,100; //Draw rectangle from (10,10) to (100,100) - -Note: If a string is specified in an inline statement, rather than creating -an anonymous string and compiling the address inline, the entire string will -be compiled directly inline. - -ASSIGNMENTS - -An assignment is a statement in which the result of an expression is stored -in a variable. An assignment usually consists of a simple variable or -subscripted array element, an = character, and an expression, terminated -with a ; character. - -Examples: - i = i + 1; //Add 1 to contents variable i - c = getchr(); //Call function and store result in variable c - s[i] = 0; //Terminate string at position i - -SHORTCUT-IFS - -A shortcut-if is a special form of assignment consisting of an evaluation -and two expressions, of which one will be assigned based on the result -of the evaluation. A shortcut-if is written as a condition surrounded -by ( and ) characters, followed by a ? character, the expression to be -evaluated if the condition was true, a : character, and the expression to -be evaluated if the condition was false. - -Example: - result = (value1 < value) ? value1 : value2; - -Note: Shortcut-ifs may only be used with assignments. This may change in -the future. - -POST-OPERATORS - -A post-operator is a special form of assignment which modifies the value -of a variable. The post-operator is suffixed to the variable it modifies. - -Post-Operators: - ++ Increment variable (increase it's value by 1) - -- Decrement variable (decrease it's value by 1) - << Left shift variable - >> Right shift variable - -Post-operators may be used with either simple variables or subscripted -array elements. - -Examples: - i++; //Increment the contents variable i - b[i]<<; //Left shift the contenta of element i of array b - -Note: Post-operators may only be used in stand-alone statements, although -this may change in the future. - -ASSIGNMENTS TO REGISTERS - -Registers A, X, and Y may assigned to using the = character. Register A -(but not X or Y) may be used with the << and >> post-operators, while -registers X and Y (but not A) may be used with the ++ and -- post-operators. - -IMPLICIT ASSIGNMENTS - -A statement consisting of only a simple variable is treated as an -implicit assignment of the A register to the variable in question. - -This is useful on systems that use memory locations as strobe registers. - -Examples: - HMOVE; //Move Objects (Atari VCS) - S80VID; //Enable 80-Column Video (Apple II) - -Note: An implicit assignment generates an STA opcode with the variable -as the operand. - -GOTO STATEMENT - -A goto statement unconditionally transfers program execution to the -specified label. When using a goto statement, it is followed by the -label name and a terminating semicolon. - -Example: - goto end; - -Note: A goto statement may be executed from within a loop structure -(although a break or continue statement is preferred), but should not -normally be used to jump from inside a function to outside of it, as -this would leave the return address on the machine stack. - -IF AND ELSE STATEMENTS - -The if then and else statements are used to conditionally execute blocks -of code. - -When using the if keyword, it is followed by an evaluation (surrounded by -parenthesis) and the block of code to be executed if the evaluation was true. - -An else statement may directly follow an if statement (with no other -executable code intervening). The else keyword is followed by the block -of code to be executed if the evaluation was false. - -Examples: - if (c = 27) goto end; - if (n) q = (n/d) else putstr("Division by 0!"); - if (r[j]13) //Echo line to screen - -Note: Unlike the other loop structures do/while statements do not use -6502 JMP instructions. This optimizes the compiled code, but limits -the amount of code inside the loop. - -FOR LOOPS - -The for statement allows the initialization, evaluation, and modification -of a loop condition in one place. For statements are usually used to -execute a piece of code a specific number of times, or to iterate through -a set of values. - -When using the if keyword, it is followed by a pair of parenthesis -containing an initialization assignment statement (which is executed once), -a semicolon separator, an evaluation (which determines if the code block -is exectued), another semicolon separator, and an increment assignment -(which is executed after each iteration of the code block). This is then -followed by the block of code to be conditionally executed. - -The assignments and conditional of a for loop must be populated. If an -infinite loop is desired, use a while () statement. - -Examples: - for (c='A'; c<='Z'; c++) putchr(c); //Print letters A-Z - for (i=strlen(s)-1;i:+;i--) putchr(s[i]); //Print string s backwards - for (i=0;c>0;i++) {c=getchr();s[i]=c} //Read characters into string s - -Note: For loops are compiled using the 6502 JMP statements, so the code -blocks may be abritrarily large. A for loop generates less efficient code -more than a simple while loop, but will always execute the increment -assignment on a continue. - -BREAK AND CONTINUE - -The break and continue statements are used to jump to the beginning or -end of a do, for, or while loop. Neither may be used outside of a loop. - -When a break statement is encountered, program execution is transferred -to the statement immediately following the end of the block associated -with the innermost for or while loop. When using the break keyword, it is -followed with a trailing semicolon. - -When a continue statement is encountered, program execution is transferred -to the beginning of the block associated with the innermost for or while -loop. In the case of a for statement, the increment assignment is executed, -followed by the evaluation, and in the case of a while statement, the -evaluation is executed. When using the break keyword, it is followed with -a trailing semicolon. - -Examples: - do {c=rdkey(); if (c=0) continue; if (c=27) break;} while (c<>13);` - for (i=0;i character, or by two " +characters. In the former case, the compiler looks for the file in an +implementation specific library directory (the default being ./include), +while in the latter case, the compiler looks for the file in the current +working directory. Two file types are currently supported. + +Header files are denoted by the .h02 extension. A header file is used to +provide the compiler with the information necessary to use machine +language system and/or library routines written in assembly language, +and consists of comments and declarations. The declarations in a header +file added to the symbol table, but do not directly generate code. After +a header file has been processed, the compiler reads and process a +assembly language file with the same name as the header file, but with +the .a02 extension instead of the .h02 extension. + +The compiler does not currently generate any assembler required +pseudo-operators, such as the specification of the target processor, +or the starting address of the assembled object code. Therefore, at least +one header file, with an accompanying assembly language file is needed +in order to successfully assemble the compiler generated code. Details +on the structure and implementation of a typical header file can be +found in the file header.txt. + +Assembly language files are denoted by the .asm extension. When the +compiler processes an assembly language file, it simply inserts the contents +of the file into the generated code. + +Note: Unlike standard C and C++, which use a preprocessor to process +directives, the C02 compiler processes directives directly. + +CONSTANTS + +A constant represents a value between 0 and 255. Values may be written as +a number (binary, decimal, osir hexadecimal) or a character literal. + +A binary number consists of a % followed by eight binary digits (0 or 1). + +A decimal number consists of one to three decimal digits (0 through 9). + +A hexadecimal number consists of a $ followed by two hexadecimal digits +(0 through 9 or A through F). + +A character literals consists of a single character surrounded by ' symbols. +A ' character may be specified by escaping it with a \. + +Examples: + &0101010 Binary Number + 123 Decimal Number + $FF Hexadecimal Number + 'A' Character Literal + '\'' Escaped Character Literal + +STRINGS + +A string is a consecutive series of characters terminated by an ASCII null +character (a byte with the value 0). + +A string literal is written as up to 255 printable characters. prefixed and +suffixed with " characters. + +SYMBOLS + +A symbol consists of an alphabetic character followed by zero to five +alphanumeric characters. Four types of symbols are supported: labels, +simple variables, variable arrays, and functions. + +A label specifies a target point for a goto statement. A label is written +as a symbol suffixed by a : character. + +A simple variable represents a single byte of memory. A variable is written +as a symbol without a suffix. + +A variable array represents a block of up to 256 continuous bytes in +memory. An Array reference are written as a symbol suffixed a [ character, + +index, and ] character. The lowest index of an array is 0, and the highest +index is one less than the number of bytes in the array. There is no bounds +checking on arrays: referencing an element beyond the end of the array will +access indeterminate memory locations. + +A function is a subroutine that receives multiple values as arguments and +optionally returns a value. A function is written as a symbol suffixed with +a ( character, up to three arguments separated by commas, and a ) character, + +The special symbols A, X, and Y represent the 6502 registers with the same +names. Registers may only be used in specific circumstances (which are +detailed in the following text). Various C02 statements modify registers +as they are processed, care should be taken when using them. However, when +used properly, register references can increase the efficiency of compiled +code. + +STATEMENTS + +Statements include declarations, assignments, stand-alone function calls, +and control structures. Most statements are suffixed with ; characters, +but some may be followed with program blocks. + +BLOCKS + +A program block is a series of statements surrounded by the { and } +characters. They may only be used with function definitions and control +structures. + +DECLARATIONS + +A declaration statement consists of type keyword (char or void) followed +by one or more variable names and optional definitions, or a single +function name and optional function block. + +Variables may only be of type char and all variable declaration statements +are suffixed with a ; character. + +A simple variable declaration may include an initial value definition in +the form of an = character and constant after the variable name. + +A variable array may be declares in one of two ways: the variable name +suffixed with a [ character, a constant specifying the upper bound of +the array, and a ] character; or a variable name followed by an = character +and string literal or series of constants separated by , characters and +surrounded by { or } characters. + +Variables are initialized at compile time. If a variable is changed during +execution, it will not be reinitialized unless the compiled program is +reloaded into memory. + +Examples: + char c; //Defines variable c + char i, j; //Defines variables i and j + char r[7]; //Defines 8 byte array r + char s = "string"; //Defines 7 byte array s initialized to "string" + char m = {1,2,3}; //Defines 3 byte array m initialized to 1, 2, and 3 + +A function declaration consists of the function name suffixed with a ( +character, followed zero to three comma separated simple variables and +a ) character. A function declaration terminated with a ; character is +called a forward declaration and does not generate any code, while one +followed by a program block creates the specified function. Functions of +type char explicitly return a value (using a return statement), while +functions of type void do not. + +Examples: + void myfunc(); //Forward declaration of function myfunc + char min(tmp1, tmp2) {if (tmp1 < tmp2) return tmp1; else return tmp2;} + +Note: Like all variables, function parameters are global. They must be +declared prior to the function decaration, and retain there values after +the function call. Although functions may be called recursively, they are +not re-entrant. Allocation of variables and functions is implementation +dependent, they could be placed in any part of memory and in any order. +The default behavior is to place variables directly after the program code, +including them as part of the generated object file. + +The return value of a function is passed through the A register. A return +statement with an explicit expression will simply process that expression +(which leaves the result in the A register) before returning. A return +statement without an expression (including an implicit return) will, by +default, return the value of the last processed expression. + +EXPRESSIONS + +An expression is a sseries of one or more terms separated by operators. + +The first term in an expression may be a function call, subscripted array +element, simple variable, constant, or register (A, X, or Y). An expression +may be preceded with a - character, in which case the first term is assumed +to be the constant 0. + +Additional terms are limited to subscripted array elements, simple variables +and constants. + +Operators: + + — Add the following value. + - — Subtract the following value. + & — Bitwise AND with the following value. + | — Bitwise OR with the following value. + ^ — Bitwise Exclusive OR with the following value. + +Arithmetic operators have no precedence. All operations are performed in +left to right order. Expressions may not contain parenthesis. + +Note: the character ! may be substituted for | on systems that do not +support the latter character. No escaping is necessary because a ! may +not appear anywere a | would. + +After an expression has been evaluated, the A register will contain the +result. + +EVALUATIONS + +An evaluation is a construct which generates either TRUE or FALSE condition. +It may be an expression, a comparison, or a test. + +A stand-alone expression evaluates to TRUE if the result is non-zero, or +FALSE if the result is zero. + +A comparison consists of an expression, a comparator, and a term (subscripted +array element, simple variable, or constant). + +Comparators: + = — Evaluates to TRUE if expression is equal to term + < — Evaluates to TRUE if expression is less than term + <= — Evaluates to TRUE if expression is less than or equal to term + > — Evaluates to TRUE if expression is greater than term + >= — Evaluates to TRUE if expression is greater than or equal to term + <> — Evaluates to TRUE if expression is not equal to term + +The parser considers == equivalent to a single =. The operator <> +was chosen instead of the usual != because it simplified the parser design. + +A test consists of an expression followed by a test-op. + +Test-Ops: + :+ — Evaluates to TRUE if the result of the expression is positive + :- — Evaluates to TRUE if the result of the expression is negative + +A negative value is one in which the high bit is a 1 (128 — 255), while a +positive value is one in which the high bit is a 0 (0 — 127). The primary +purpose of test operators is to check the results of functions that return +a positive value upon succesful completion and a negative value if an error +was encounters. They compile into smaller code than would be generated +using the equivalent comparison operators. + +A comparison may be preceded by negation operator (a ! character), which +reverses the meaning of the entire comparison. For example, + ! expr +evaluates to TRUE if expr is zero, or FALSE if it is non-zero; while + ! expr = term +evaluates to TRUE if expr and term are not equal, or FALSE if they are; and + ! expr :+ +evaluates to TRUE if expr is negative, or FALSE if it is positive + +Note: Evaluations are compiled directly into 6502 conditional branch +instructions, which precludes their use inside expressions. Standalone +expressions and test-ops generate a single branch instruction, and +therefore result in the most efficient code. Comparisons generate a +compare instruction and one or two branch instructions (=. <. >=, and <> +generate one, while <= and > generate two). A preceding negation operator +will switch the number of branch instructions used in a comparison, but +otherwise does not change the size of the generated code. + +ARRAY SUBSCRIPTS + +Individual elements of an array are accessed using subscript notation. +Subscripted array elements may be used as a terms in an expression, as well +as the target variable in an assignments. They are written as the variable +name suffixed with a [ character, followed by an index, and the ] character. +The index may be a constant, a simple variable, or a register (A, X or Y). + +Examples: + z = r[i]; //Store the value from element i of array r into variable z + r[0] = z; //Store the value of variable z into the first element of r + +Note: After a subscripted array reference, the 6502 X register will contain +the value of the index (unless the register Y was used as the index, in +which X register is not changed). + +FUNCTION CALLS + +A function call may be used as a stand-alone statement, or as the first +term in an expression. A function call consists of the function name +appended with a ( character, followed by zero to three arguments separated +with commas, and a closing ) character. + +The first argument of a function call may be an expression, address, or +string (see below). + +The second argument may be a term (subscripted array element, simple +variable, or constant), address, or string, + +The third argument may only be a simple variable or constant. + +If the first or second argument is an address or string, then no more +arguments may be passed. + +To pass the address of a variable or array into a function, precede the +variable name with the address-of operator &. To pass a string, simply +specify the string as the argument. + +Examples: + c = getc(); //Get character from keyboard + n = abs(b+c-d); //Return the absolute value of result of expression + m = min(r[i], r[j]); //Return lesser of to array elements + l = strlen(&s); //Return the length of string s + p = strchr(c, &s); //Return position of character c in string s + putc(getc()); //Echo typed characters to screen + puts("Hello World"); //Write "Hello World" to screen + +Note: This particular argument passing convention has been chosen because +of the 6502's limited number of registers and stack processing instructions. +When an address is passed, the high byte is stored in the Y register and +the low byte in the X register. If a string is passed, it is turned into +anonymous array, and it's address is passed in the Y and X registers. +Otherwise, the first argument is passed in the A register, the second in +the Y register, and the third in the X register. + +EXTENDED PARAMETER PASSING + +To enable direct calling of machine language routines that that do not match +the built-in parameter passing convention, C02 supports the non-standard +statements push, pop, and inline. + +The push statement is used to push arguments onto the machine stack prior +to a function call. When using a push statement, it is followed by one or +more arguments, separated by commas, and terminated with a semi-colon. An +argument may be an expression, in which case the single byte result is +pushed onto the stack, or it may be an address or string, in which case the +address is pushed onto the stack, high byte first and low byte second. + +The pop statement is likewise used to pop arguments off of the machine +stack after a function call. When using a pop statement, it is followed +with one or more simple variables, separated by commas, and terminated +with a semicolon. If any of the arguments are to be discarded, an asterisk +can be specified instead of a variable name. + +The number of arguments pushed and popped may or may not be the same, +depending on how the machine language routine manipulates the stack pointer. + +Examples: + push d,r; mult(); pop p; + push x1,y1,x2,y2; rect(); pop *,*,*,*; + push &s, "tail"; strcat(); + +Note: The push and pop statements could also be used to manipulate the +stack inside or separate from a function, but this should be done with +care. + +The inline statement is used when calling machine language routines that +expect constant byte or word values immediately following the 6502 JSR +instruction. A routine of this type will adjust the return address to the +point directly after the last instruction. When using the inline statement, +it is followed by one or more arguments, separated by commas, and +terminated with a semicolon. The arguments may be constants, addresses, +or strings. + +Examples; + iprint(); inline "Hello World"; //Print "Hello World" + irect(); inline 10,10,100,100; //Draw rectangle from (10,10) to (100,100) + +Note: If a string is specified in an inline statement, rather than creating +an anonymous string and compiling the address inline, the entire string will +be compiled directly inline. + +ASSIGNMENTS + +An assignment is a statement in which the result of an expression is stored +in a variable. An assignment usually consists of a simple variable or +subscripted array element, an = character, and an expression, terminated +with a ; character. + +Examples: + i = i + 1; //Add 1 to contents variable i + c = getchr(); //Call function and store result in variable c + s[i] = 0; //Terminate string at position i + +SHORTCUT-IFS + +A shortcut-if is a special form of assignment consisting of an evaluation +and two expressions, of which one will be assigned based on the result +of the evaluation. A shortcut-if is written as a condition surrounded +by ( and ) characters, followed by a ? character, the expression to be +evaluated if the condition was true, a : character, and the expression to +be evaluated if the condition was false. + +Example: + result = (value1 < value) ? value1 : value2; + +Note: Shortcut-ifs may only be used with assignments. This may change in +the future. + +POST-OPERATORS + +A post-operator is a special form of assignment which modifies the value +of a variable. The post-operator is suffixed to the variable it modifies. + +Post-Operators: + ++ Increment variable (increase it's value by 1) + -- Decrement variable (decrease it's value by 1) + << Left shift variable + >> Right shift variable + +Post-operators may be used with either simple variables or subscripted +array elements. + +Examples: + i++; //Increment the contents variable i + b[i]<<; //Left shift the contenta of element i of array b + +Note: Post-operators may only be used in stand-alone statements, although +this may change in the future. + +ASSIGNMENTS TO REGISTERS + +Registers A, X, and Y may assigned to using the = character. Register A +(but not X or Y) may be used with the << and >> post-operators, while +registers X and Y (but not A) may be used with the ++ and -- post-operators. + +IMPLICIT ASSIGNMENTS + +A statement consisting of only a simple variable is treated as an +implicit assignment of the A register to the variable in question. + +This is useful on systems that use memory locations as strobe registers. + +Examples: + HMOVE; //Move Objects (Atari VCS) + S80VID; //Enable 80-Column Video (Apple II) + +Note: An implicit assignment generates an STA opcode with the variable +as the operand. + +GOTO STATEMENT + +A goto statement unconditionally transfers program execution to the +specified label. When using a goto statement, it is followed by the +label name and a terminating semicolon. + +Example: + goto end; + +Note: A goto statement may be executed from within a loop structure +(although a break or continue statement is preferred), but should not +normally be used to jump from inside a function to outside of it, as +this would leave the return address on the machine stack. + +IF AND ELSE STATEMENTS + +The if then and else statements are used to conditionally execute blocks +of code. + +When using the if keyword, it is followed by an evaluation (surrounded by +parenthesis) and the block of code to be executed if the evaluation was true. + +An else statement may directly follow an if statement (with no other +executable code intervening). The else keyword is followed by the block +of code to be executed if the evaluation was false. + +Examples: + if (c = 27) goto end; + if (n) q = (n/d) else putstr("Division by 0!"); + if (r[j]13) //Echo line to screen + +Note: Unlike the other loop structures do/while statements do not use +6502 JMP instructions. This optimizes the compiled code, but limits +the amount of code inside the loop. + +FOR LOOPS + +The for statement allows the initialization, evaluation, and modification +of a loop condition in one place. For statements are usually used to +execute a piece of code a specific number of times, or to iterate through +a set of values. + +When using the if keyword, it is followed by a pair of parenthesis +containing an initialization assignment statement (which is executed once), +a semicolon separator, an evaluation (which determines if the code block +is exectued), another semicolon separator, and an increment assignment +(which is executed after each iteration of the code block). This is then +followed by the block of code to be conditionally executed. + +The assignments and conditional of a for loop must be populated. If an +infinite loop is desired, use a while () statement. + +Examples: + for (c='A'; c<='Z'; c++) putchr(c); //Print letters A-Z + for (i=strlen(s)-1;i:+;i--) putchr(s[i]); //Print string s backwards + for (i=0;c>0;i++) {c=getchr();s[i]=c} //Read characters into string s + +Note: For loops are compiled using the 6502 JMP statements, so the code +blocks may be abritrarily large. A for loop generates less efficient code +more than a simple while loop, but will always execute the increment +assignment on a continue. + +BREAK AND CONTINUE + +The break and continue statements are used to jump to the beginning or +end of a do, for, or while loop. Neither may be used outside of a loop. + +When a break statement is encountered, program execution is transferred +to the statement immediately following the end of the block associated +with the innermost for or while loop. When using the break keyword, it is +followed with a trailing semicolon. + +When a continue statement is encountered, program execution is transferred +to the beginning of the block associated with the innermost for or while +loop. In the case of a for statement, the increment assignment is executed, +followed by the evaluation, and in the case of a while statement, the +evaluation is executed. When using the break keyword, it is followed with +a trailing semicolon. + +Examples: + do {c=rdkey(); if (c=0) continue; if (c=27) break;} while (c<>13);` + for (i=0;i