Documented FUNCTION in directives, added errors.md

This commit is contained in:
Carl-Henrik Skårstedt 2020-01-15 11:23:07 -08:00
parent d80f5473a2
commit 53f69edc5a
3 changed files with 189 additions and 1 deletions

View File

@ -81,6 +81,15 @@ Create a macro. When used with the command line option -endm the macro ends with
ENDM
### FUNCTION
A user function is a pre-defined one-line expression that can be used in a similar way as a macro, but instead of generating binary data it returns a single integer value.
; user defined function
FUNCTION alignto(address, alignment) (address + alignment-1) & (~alignment)
Note that functions must evaluate at the time of reference, if any symbol is not evaluated it will fail. This differs from in-place expressions that can have references that will be evaluated at a later time in assembly or at link time.
### EVAL, PRINT, ECHO
Print expression to stdout during assemble. The syntax is:

175
docs/errors.md Normal file
View File

@ -0,0 +1,175 @@
# List of x65 error messages
## Undefined code
Could not recognize code at this point in the file
## Unexpected character in expression
A character in an expression has confused the assembler evaluator
## Too many values in expression
There is a limit to the number of values encountered in a single expression, feel free to change that number if you must.
## Too many operators in expression
There is a limit to the number of operators encountered in a single expression, this can also be modified as needed.
## Unbalanced right parenthesis in expression
A right parenthesis without a corresponding left parenthesis was encountered in the expression
## Expression operation
The expression evaluator has confused itself with an unrecognized operator.
## Expression missing values
Not enough values to complete an expression operator
## Instruction can not be zero page
An attempt to force a zero page command that does not support it was foiled by the assembler.
## Invalid addressing mode for instruction
Indeed!
## Internal label organization mishap
Internal error
## Bad addressing mode
Don't be bad
## Unexpected character in addressing mode
What gives?
## Unexpected label assignment format
Equal sign or EQU is desired for assigning const or mutable (LABEL) labels.
## Changing value of label that is constant
You declared that you would not change your mind but you did. I can't deal with it.
## Out of labels in pool
A label pool was declared at a certain size that has now been exceeded.
## Internal label pool release confusion
Internal error
## Label pool range evaluation failed
Could not determine the range for the label pool at the current line of assembly
## Label pool was redeclared within its scope
No recursive pool dipping please.
## Pool label already defined
Once is enough
## Struct already defined
Don't repeat yourself
## Referenced struct not found
But specify it at least once.
## Declare constant type not recognized (dc.?)
Specify word size using something that can be understood
## rept count expression could not be evaluated
The count needs to be evaluated at the current line of assembly
## hex must be followed by an even number of hex numbers
## DS directive failed to evaluate immediately
The count needs to be evaluated at the current line of assembly
## File is not a valid x65 object file
A file that was referenced with an INCOBJ directive was not recognized as a valid x65 object file
## Failed to read include file
## Using symbol PULL without first using a PUSH
Withdrawing beyond your deposits amounts to robbery.
## User invoked error
An ABORT or ERR directive was assembled
## Errors after this point will stop execution
This is a placeholder error message
## Branch is out of range
Max branch distance was exceeded at this point in assembly
## Function declaration is missing name or expression
A FUNCTION directive requires a name, open/close parenthesis and an expression. Parameters within the parenthesis is optional.
## Function could not resolve the expression
The expression could not be evaluated at this point in assembly
## Expression evaluateion recursion too deep
## Target address must evaluate immediately for this operation
## Scoping is too deep
## Unbalanced scope closure
## Unexpected macro formatting
## Align must evaluate immediately
## Out of memory for macro expansion
Your memory is not enough
## Problem with macro argument
## Conditional could not be resolved
## #endif encountered outside conditional block
ENDIF directive without an IF or equivalent
## #else or #elif outside conditional block
ELSE or ELIF directive without an IF or equivalent
## Struct can not be assembled as is
## Enum can not be assembled as is
## Conditional assembly (#if/#ifdef) was not terminated in file or macro
an IF or equivalent does not have a matching ENDIF directive
## rept is missing a scope ('{ ... }')
You want me to repeat what exactly?
## Link can only be used in a fixed address section
## Link can not be used in dummy sections
## Can not process this line
## Unexpected target offset for reloc or late evaluation
## CPU is not supported
## Can't append sections
## Zero page / Direct page section out of range
## Attempting to assign an address to a non-existent section
## Attempting to assign an address to a fixed address section
## Can not link a zero page section with a non-zp section
## Out of memory while building
## Can not write to file
## Assembly aborted
## Condition too deeply nested
There is a limit to the number of IFs within IFs.

View File

@ -57,4 +57,8 @@ See [Eval Functions](eval_functions.md)
Some info about the included example x65macro.i file.
See [Macro Samples](macro_samples.md)
See [Macro Samples](macro_samples.md)
## List of Errors
See [Error List](errors.md)