1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-11-22 16:34:15 +00:00

Updated documentation regarding array subscripts and function calls

This commit is contained in:
Curtis F Kaylor 2018-07-19 14:45:40 -04:00
parent ca97762a9c
commit ff70ba739a
3 changed files with 42 additions and 14 deletions

View File

@ -391,6 +391,12 @@ not appear anywere a | would.
After an expression has been evaluated, the A register will contain the After an expression has been evaluated, the A register will contain the
result. result.
Note: Function calls are allowed in the first term of an expression
because upon return from the function the return value will be in the
Accumulator. However, due to the 6502 having only one Accumulatorm which
is used for all operations between two bytes, there is no simple system
agnostic method for allowing function calls in subsequent terms.
EVALUATIONS EVALUATIONS
An evaluation is a construct which generates either TRUE or FALSE condition. An evaluation is a construct which generates either TRUE or FALSE condition.
@ -450,16 +456,24 @@ Individual elements of an array are accessed using subscript notation.
Subscripted array elements may be used as a terms in an expression, as 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 well as the target variable in an assignments. They are written as the
variable name suffixed with a [ character, followed by an index, and variable name suffixed with a [ character, followed by an index, and
the ] character. The index may be a literal, constant, simple variable, the ] character.
or register (A, X or Y).
When assigning to an array element, the index may be a literal, constant,
or simple variable.
When using an array element in an expression or pop statement, the index
may be any expression.
Examples: Examples:
z = r[i]; //Store the value from element i of array r into variable z 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 r[0] = z; //Store the value of variable z into the first element of r
z = d[15-i]; //Store the value element 15-i of array d into variable z
c = t[getc()]; //Get a character, translate using array t and store in c
Note: After a subscripted array reference, the 6502 X register will contain 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 the value of the index (unless the register Y was used as the index, in
which X register is not changed). which X register is not changed). When evaluating an expression used as an
index, the Accumulator is tempororaly pushed onto the 6502 stack.
STRUCTS STRUCTS
@ -557,17 +571,18 @@ 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 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 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 one or more simple variables or subscripted array elements , separated
with a semicolon. If any of the arguments are to be discarded, an asterisk by commas, and terminated with a semicolon. If any of the arguments are to
can be specified instead of a variable name. 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, 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. depending on how the machine language routine manipulates the stack pointer.
Examples: Examples:
push d,r; mult(); pop p; push d,r; mult(); pop p; //multiply d times r and store in p
push x1,y1,x2,y2; rect(); pop *,*,*,*; push x1,y1,x2,y2; rect(); pop *,*,*,*; //draw rectangle from x1,y1 to x2,y2
push &s, "tail"; strcat(); push &s, "tail"; strcat(); //concatenate "tail" onto string s
push x[i],y[i]; rotate(d); pop x[i],y[i]; //rotate point x[1],y[i] by d
Note: The push and pop statements could also be used to manipulate the 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 stack inside or separate from a function, but this should be done with
@ -669,7 +684,8 @@ simple variable. Registers are not allowed in plural assignments.
Examples: Examples:
row, col = scnpos(); //Get current screen position row, col = scnpos(); //Get current screen position
cr, mn, mx = cpmnmx(a, b); //Compare two values, return min and max cr, mn, mx = cpmnmx(a, b); //Compare two values, return min and max
lwr[i], upr[i] = tolwup(txt[i]); //Convert char to lower and upper case x[i], y[i] = rotate(x[i],y[i],d); //Rotate x[i] and y[i] by d degrees
Note: When compiled, a plural assignment generates an STX for the third Note: When compiled, a plural assignment generates an STX for the third
assignment (if specified), an STY for the second assignment and an STA for assignment (if specified), an STY for the second assignment and an STA for

View File

@ -63,6 +63,18 @@ C02 supports the addition, subtraction, bitwise-and, bitwise-or, and
exclusive-or operators. The multiplication, division, and binary shift exclusive-or operators. The multiplication, division, and binary shift
operators are not supported. These can be implemented through functions. 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 The sizeof operator in C02 is the at sign @. It may only be used with
declared variables and struct members, not types. declared variables and struct members, not types.

Binary file not shown.