C02 for C programmers TYPES C02 only supports one data type: unsigned char. POINTERS C02 does not support pointer type variables or parameters. However, the address-of operator may be used in function calls and the inline statement. DIRECTIVES C02 does not use a preprocessor. All directives are directly processed by the compiler. C02 supports the directives #include and #pragma. The directive #define is currently unimplemented and generates an error. The #if, #else, and #endif directives are not recognized by C02. CONSTANTS The syntax of the const keyword in C02 differs from that use in standard C. In C02, all constant names are prefixed with a # symbol. ENUMERATION The syntax of an enum statement in C02 is similar to standard C, except that no type name is specified and values may not be explicitly assigned to the enumerated constants. DECLARATIONS Variable and function names may be no more than six characters in length. Multiple variable declarations separated by commas are allowed. A variable in a declaration may be initialized by following it with an equal sign and a constant, however this declaration is done at compile time, so no re-initialization will occur during code execution. Array declarations using bracket syntax specify the upper bound, rather than the array size. Therefore, the array will be allocated with one more element than the specified number. Only one-dimensional arrays of type char are allowed and are limited to a total of 256 elements. Multi-dimensional arrays, arrays of arrays, and arrays of structs are not supported. Struct definition and syntax is similar to standard C. When defining a struct, the char keyword is optional, since char the char type is implied. Struct members may only be simple variables or arrays. The maximum total size of a struct is 256 bytes. Initialization of members during declaration of a struct variable is not supported. REGISTERS The 6502 registers may be explicitly referenced by name, i.e. A, X, and Y. These may only be used in specific places due to the nature of the compiled code a well as the limitations of the 6502 instruction set. EXPRESSIONS C02 supports the addition, subtraction, bitwise-and, bitwise-or, and exclusive-or operators. The multiplication, division, and binary shift operators are not supported. These can be implemented through functions. Unary minus may only be used at the beginning of an expression, in which case it is treated as a literal 0 and the subtraction operater, and the term following the minus is used as the second term of the expression. Functions calls may only be used in the first term of an expression. However, the first argument of any function call may be any expression (including one with a function call as the first term). As in standard C, subscripted array elements may be used in any term of an exptression and the index may be any expression (including one with a function call as the first term). The sizeof operator in C02 is the at sign @. It may only be used with declared variables and struct members, not types. CONDITIONALS Conditional operations, including comparisons and logical operators, may not be used within or in place of normal expressions, and are only allowed in if, while, and for statements, as well as shortcut-ifs. The comparison operators are ==, <, <=, >=, >, and <>. Unlike standard C, the not-equals operator is <> instead of !=. In addition, = may be substituted for ==. The logical not operator ! negates an entire comparison rather than an individual term within the comparison, thus the C02 code !b