Assembler
|
The OPT
keyword denotes how the following block of assembler should be handled. It
relates to every block separately, so you must put the OPT
keyword at the start of
each block. For example:
FOR loop% = 0 TO 2 STEP 2 P% = code% [ OPT loop% ... some basic initialization stuff here ... ] IF computer_is_networked% THEN [ OPT loop% ... network code ... ] ELSE [ OPT loop% ... non-network code ... ] ENDIF [ OPT loop% ... the rest of the code ... ] NEXTThis is a rough example showing how different bits of code can be utilised depending upon the current conditions (and the code need not be the same number of instructions either!); and it shows how you must use the
OPT
keyword - even if you only have one loop. However
the power and complexity of BASIC can be utilised to build up all kinds of fancy code.
The OPT
parameters have the following meanings:
Bit 0 - Produce a listing during the compilation Bit 1 - Report errors, such as unresolved references Bit 2 - Offset assembly, if code is compiled for execution at a different place to where it currently is. Bit 3 - Range check, will report if the code being compiled overshoots the memory allocated. Bit 4 - Enables the 'new' instructions. A list of them is here. Bit 8 - If set, the SWI "OS_SynchroniseCacheAreas" is not called after compilation. (does anybody know when this was introduced? RISC OS 3.7?) Option List Err Offs RChk -------------------------------- OPT 0 No No No No <-- First pass OPT 1 Yes No No No OPT 2 No Yes No No <-- Second pass OPT 3 Yes Yes No No OPT 4 No No Yes No OPT 5 Yes No Yes No OPT 6 No Yes Yes No OPT 7 Yes Yes Yes No OPT 8 No No No Yes <-- Alt. first pass OPT 9 Yes No No Yes OPT 10 No Yes No Yes <-- Alt. second pass OPT 11 Yes Yes No Yes OPT 12 No No Yes Yes OPT 13 Yes No Yes Yes OPT 14 No Yes Yes Yes OPT 15 Yes Yes Yes Yes OPT 16 No list, no error reporting, no offset assembly, no range check, but will use new instructions. ...through to... OPT 31 List, error reporting, offset assembly, range checking, and uses the new instructions. The first two option codes indicated are common values used when compiling code. The alternative option codes are identical, except that range checking is enabled. This is useful for reporting if the code is larger than the space allocated. To include new instructions in a program, instead of doing: FOR loop% = 0 TO 2 STEP 2 P% = code% [ OPT loop% You would do: FOR loop% = 16 TO 18 STEP 2 P% = code% [ OPT loop%
BXR0
" a branch to label XR0, or is it a thumb instruction?).
So RISC OS 4 now has this selectable with a bit in the options.
A lot of the functionality here is duplicated by Darren Salt's ExtBASasm module. To give you an example, the instruction in italics is NOT supported by ExtBASasm (there's only one). The rest are...
Links take you to places where you can find out more about the linked instruction.
The new instructions are:
ARM7 / StrongARM extensions