# CSUB

Compatible with:
DOS Maximite CMM MM150 MM170 MM+ MMX Picromite ArmiteL4 Armite F4 ArmiteH7 Picomite CMM2

Syntax:
CSUB name [type [, type] ...]

Description:
Defines the binary code for an embedded machine code program module written in C or ARM assembler.
The module will appear in MMBasic as the command 'name' and can be used in the same manner as a built-in command.
Multiple embedded routines can be used in a program with each defining a different module with a different 'name'.
The first 'hex' word must be the offset (in 32-bit words) to the entry point of the embedded routine (usually the function main()).
The following hex words are the compiled binary code for the module. These are automatically programmed into MMBasic when the program is saved.
Each 'hex' must be exactly eight hex digits representing the bits in a 32-bit word and be separated by one or more spaces or new lines.
The command must be terminated by a matching END CSUB. Any errors in the data format will be reported when the program is loaded into flash by the RUN command.
During execution MMBasic will skip over any CSUB commands so they can be placed anywhere in the program.
The type of each parameter can be specified in the definition. For example: CSub MySub integer, integer, string. This specifies that there will be three parameters, the first two being integers and the third a string.
Note:
Up to ten arguments can be specified ('arg1', 'arg2', etc).
If a variable or array is specified as an argument the C routine will receive a pointer to the memory allocated to the variable or array and the C routine can change this memory to return a value to the caller.
In the case of arrays, they should be passed with empty brackets e.g. arg(). In the CSUB the argument will be supplied as a pointer to the first element of the array.
Constants and expressions will be passed to the embedded C routine as pointers to a temporary memory space holding the value.

Last edited: 29 September, 2020