mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-11-22 16:34:15 +00:00
Added SELECT/CASE/DEFAULT to documentation
This commit is contained in:
parent
459ef1b197
commit
cd21e60f9a
52
doc/c02.txt
52
doc/c02.txt
@ -108,7 +108,7 @@ 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 decimal number consists of one to three decimal digits (0 through 9).
|
||||||
|
|
||||||
A hexadecimal number consists of a $ followed by two hexadecimal digits
|
A hexadecimal number consists of a $ followed by two hexadecimal digits
|
||||||
(0 throuth 9 or A through F).
|
(0 through 9 or A through F).
|
||||||
|
|
||||||
A character literals consists of a single character surrounded by ' symbols.
|
A character literals consists of a single character surrounded by ' symbols.
|
||||||
A ' character may be specified by escaping it with a \.
|
A ' character may be specified by escaping it with a \.
|
||||||
@ -347,12 +347,13 @@ variable name with the address-of operator &. To pass a string, simply
|
|||||||
specify the string as the argument.
|
specify the string as the argument.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
c = getchr(); //Get character from keyboard
|
c = getc(); //Get character from keyboard
|
||||||
n = abs(b+c-d); //Return the absolute value of result of expression
|
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
|
m = min(r[i], r[j]); //Return lesser of to array elements
|
||||||
l = strlen(&s); //Return the length of string s
|
l = strlen(&s); //Return the length of string s
|
||||||
p = strchr(c, &s); //Return position of character c in string s
|
p = strchr(c, &s); //Return position of character c in string s
|
||||||
putstr("Hello World"); //Write "Hello World" to screen
|
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
|
Note: This particular argument passing convention has been chosen because
|
||||||
of the 6502's limited number of registers and stack processing instructions.
|
of the 6502's limited number of registers and stack processing instructions.
|
||||||
@ -373,7 +374,7 @@ 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
|
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
|
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
|
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.
|
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
|
||||||
@ -512,9 +513,48 @@ Note: In order to optimize the compiled code, the if and else statements
|
|||||||
are to 6502 relative branch instructions. This limits the amount of
|
are to 6502 relative branch instructions. This limits the amount of
|
||||||
generated code between the if statement and the end of the if/else block
|
generated code between the if statement and the end of the if/else block
|
||||||
to slightly less than 127 characters. This should be sufficient in most
|
to slightly less than 127 characters. This should be sufficient in most
|
||||||
cases, but larger code blocks can be accomodated using function calls or
|
cases, but larger code blocks can be accommodated using function calls or
|
||||||
goto statements.
|
goto statements.
|
||||||
|
|
||||||
|
SELECT, CASE, AND DEFAULT STATEMENTS
|
||||||
|
|
||||||
|
The select, case, an default statements are used to execute a specific
|
||||||
|
block of code depending on the result of an expression.
|
||||||
|
|
||||||
|
When using the select keyword, it is followed by an expression (surrounded
|
||||||
|
by parenthesis) and an opening curly brace, which begins the select block.
|
||||||
|
This must then be followed by a case statement.
|
||||||
|
|
||||||
|
Each use of the case keyword is followed by term and a colon. If the
|
||||||
|
term is equal to select expression then the code immediately following
|
||||||
|
the is executed, otherwise, program execution transfers to the next
|
||||||
|
case or default statement.
|
||||||
|
|
||||||
|
The code between two case statements or a case and default statement is
|
||||||
|
called a case block. At the end of a case block, program execution
|
||||||
|
transfers to the end of the select block (the closing curly brace at
|
||||||
|
the end of the default block).
|
||||||
|
|
||||||
|
The last case block must be followed by a default statement. When using
|
||||||
|
the default keyword, it is followed by a colon. The code between the
|
||||||
|
default statement and the end of the select block (marked with a closing
|
||||||
|
curly-brace) is called the default block and is executed if none of
|
||||||
|
the case arguments matched the select expression.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
puts("You pressed ");
|
||||||
|
select (getc()) {
|
||||||
|
case $0D: putln("The Enter key");
|
||||||
|
case ' ': putln("The space bar");
|
||||||
|
case ltr: putln("The character in variable 'ltr'");
|
||||||
|
case s[2]: putln("The third character of string 's'");
|
||||||
|
default: putln("some other key");
|
||||||
|
}
|
||||||
|
|
||||||
|
Note: It's possible for multiple case statement arguments to evaluate to
|
||||||
|
the same value. In this case, only the first case block matching the
|
||||||
|
select expression will be executed.
|
||||||
|
|
||||||
WHILE LOOPS
|
WHILE LOOPS
|
||||||
|
|
||||||
The while statement is used to conditionally execute code in a loop. When
|
The while statement is used to conditionally execute code in a loop. When
|
||||||
@ -531,7 +571,7 @@ Examples:
|
|||||||
while() if (rdkey()) break; //Wait for a keypress
|
while() if (rdkey()) break; //Wait for a keypress
|
||||||
|
|
||||||
Note: While loops are compiled using the 6502 JMP statements, so the code
|
Note: While loops are compiled using the 6502 JMP statements, so the code
|
||||||
blocks may be abritrarily large.
|
blocks may be arbitrarily large.
|
||||||
|
|
||||||
DO WHILE LOOPS
|
DO WHILE LOOPS
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@ C02 only supports one data type: unsigned char.
|
|||||||
POINTERS
|
POINTERS
|
||||||
|
|
||||||
C02 does not support pointer type variables or parameters. However, the
|
C02 does not support pointer type variables or parameters. However, the
|
||||||
address-of operator may be used in function calls.
|
address-of operator may be used in function calls and the inline
|
||||||
|
statement.
|
||||||
|
|
||||||
|
|
||||||
DECLARATIONS
|
DECLARATIONS
|
||||||
@ -28,3 +29,10 @@ EXPRESSIONS
|
|||||||
C02 supports the addition, subtraction, bitwise-and, bitwise-or, and
|
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.
|
||||||
|
|
||||||
|
STATEMENTS
|
||||||
|
|
||||||
|
Instead of the switch statement, C02 uses the select statement. The
|
||||||
|
select statement works almost identically to the switch statement except
|
||||||
|
that case blocks do not fall through and the break statement does not
|
||||||
|
exit a case block.
|
||||||
|
Loading…
Reference in New Issue
Block a user