ESA accepts several instructions and/or constructions on a single line:
lea.l buffer,a0 § bool d1=d2,d0.b § add.b d7,d7 § ...
The instructions in the example are separated by §
(the leading SPACE is compulsory, the following not), the default separator (which can be substituted with the SEPARATOR
option).
Labels, of course, cannot be specified after a separator.
Error reports are shown in this form:
"ERROR
" NUMBER
":
" MESSAGE
or, when needed:
"ERROR
" NUMBER
":
" MESSAGE
"at line
" LINE
"of
" FILE
":
"
">
" CODE
where:
NUMBER
is the number of the error found (the AmigaDOS return code will be this number +19).
MESSAGE
is the concise explanation of what went wrong.
LINE
is the number of the line which the error occurred at.
FILE
is the file which contains the error (only the file part of the path is printed).
CODE
is the source line which contains the error.
In some cases, the same report can be given for different errors.
These notes reveal, in no particular order, some interesting aspects that are not so obvious.
PREFIX
option); otherwise, it can be either 'p' for global procedures or 'f' for global functions.
~ ... ^
") generates capitalized letters ("EOR
");
-(ax)+
" is recognized as a correct var.
Basic, speedy, flexible... but hard to work with due to the complexity of usage. Often, to make things easier for us humans, simplicity, speed and flexibility are sacrificed. This applies to almost everything in computing (and in the "real" world as well). And this is exactly what naturally happens with ESA.
ESA code is normally quite efficient - sometimes even perfectly efficient -, but obviously it cannot match the performance of hand-written assembly in all cases. So, WHEN WRITING TIME-CRITIC ROUTINES, DO NOT RELY ON ESA CODE SPEED!
That said, do not be afraid: not only generated code is normally good, but inefficiencies can be kept under control by understanding well the behaviour of the constructions.