|
CALL and USR |
|
BASIC provides two methods for running sections of code, CALL and USR.
P% = code%
[ OPT l%
.exit
MOV PC, R14
.printit
CMP R0, #0
MOVEQ PC, R14
SWI "OS_Write0"
B exit
]
You have defined three possible entry points:
$code% = filename$+CHR$0 code%!12 = filetype% code%!16 = filelength% CALL process_fileParameters will have already been set up, so to read the filename you just
ADR a
register, then LDRB r, [pointer], #1 until you reach a zero byte.
Both CALL and USR accept register values. Whatever you set A% to H% to
be will be stored in R0 to R7.
A% = 1 B% = 2 CALL somecodeThe function somecode will be entered with R0 set to 1 and R1 set to 2.
The principal difference, however, is that with CALL you can pass parameters...
CALL mycode, name$, address$, file_handle%...and USR takes no parameters, but will return the value of R0.
result% = USR(mycode)
Unfortunately, you cannot pass parameters AND return a value in R0 at the same time.
For simple code, or code that could be run stand-alone (i.e., not from BASIC), this is all you
really need to know.
However BASIC offers much much more. All of this is detailed in the
section on extended BASIC facilities. It is worth taking a look at, as it offers access to
several useful BASIC functions and status words.