Glue logic must implement:
if (debug command queue is not empty) execute debug command else if (executing a thread) run VM else if (event queue is not empty) fetch event run VM else sleep until something happens
#define ASEBA_NATIVES_STD_COUNT 21 |
#define ASEBA_NATIVES_STD_DESCRIPTIONS |
&AsebaNativeDescription_veccopy, \ &AsebaNativeDescription_vecfill, \ &AsebaNativeDescription_vecaddscalar, \ &AsebaNativeDescription_vecadd, \ &AsebaNativeDescription_vecsub, \ &AsebaNativeDescription_vecmul, \ &AsebaNativeDescription_vecdiv, \ &AsebaNativeDescription_vecmin, \ &AsebaNativeDescription_vecmax, \ &AsebaNativeDescription_vecdot, \ &AsebaNativeDescription_vecstat, \ &AsebaNativeDescription_vecargbounds, \ &AsebaNativeDescription_vecsort, \ &AsebaNativeDescription_mathmuldiv, \ &AsebaNativeDescription_mathatan2, \ &AsebaNativeDescription_mathsin, \ &AsebaNativeDescription_mathcos, \ &AsebaNativeDescription_mathrot2, \ &AsebaNativeDescription_mathsqrt, \ &AsebaNativeDescription_vecnonzerosequence, \ &AsebaNativeDescription_rand
snippet to include descriptions of standard native functions
#define ASEBA_NATIVES_STD_FUNCTIONS |
AsebaNative_veccopy, \ AsebaNative_vecfill, \ AsebaNative_vecaddscalar, \ AsebaNative_vecadd, \ AsebaNative_vecsub, \ AsebaNative_vecmul, \ AsebaNative_vecdiv, \ AsebaNative_vecmin, \ AsebaNative_vecmax, \ AsebaNative_vecdot, \ AsebaNative_vecstat, \ AsebaNative_vecargbounds, \ AsebaNative_vecsort, \ AsebaNative_mathmuldiv, \ AsebaNative_mathatan2, \ AsebaNative_mathsin, \ AsebaNative_mathcos, \ AsebaNative_mathrot2, \ AsebaNative_mathsqrt, \ AsebaNative_vecnonzerosequence, \ AsebaNative_rand
snippet to include standard native functions
#define AsebaMaskClear | ( | v, | |
m | |||
) | ((v) &= (~(m))) |
#define AsebaMaskIsClear | ( | v, | |
m | |||
) | (((v) & (m)) == 0) |
#define AsebaMaskIsSet | ( | v, | |
m | |||
) | (((v) & (m)) != 0) |
#define AsebaMaskSet | ( | v, | |
m | |||
) | ((v) |= (m)) |
#define AsebaSendMessageWords | ( | vm, | |
type, | |||
data, | |||
size | |||
) | AsebaSendMessage(vm,type,data,(size)*2) |
#define BIT_CLR | ( | v, | |
b | |||
) | ((v) &= (~(1 << (b)))) |
#define BIT_SET | ( | v, | |
b | |||
) | ((v) |= (1 << (b))) |
#define GET_BIT | ( | v, | |
b | |||
) | (((v) >> (b)) & 0x1) |
typedef void(* AsebaNativeFunctionPointer)(AsebaVMState *vm) |
anonymous enum |
void __attribute__ | ( | (weak) | ) |
Called by AsebaVMDebugMessage when VM is going to be run
Called by AsebaVMEmitNodeSpecificError to be notified when VM hit an execution error Is also called for wrong array access or division by 0 with message == NULL
void aseba_comb_sort | ( | sint16 * | input, |
uint16 | size | ||
) |
sint16 aseba_sqrt | ( | sint16 | num | ) |
void AsebaDebugBareRun | ( | AsebaVMState * | vm, |
uint16 | stepsLimit | ||
) |
void AsebaDebugBreakpointRun | ( | AsebaVMState * | vm, |
uint16 | stepsLimit | ||
) |
uint16 AsebaGetRandom | ( | ) |
void AsebaNative_mathatan2 | ( | AsebaVMState * | vm | ) |
void AsebaNative_mathcos | ( | AsebaVMState * | vm | ) |
void AsebaNative_mathmuldiv | ( | AsebaVMState * | vm | ) |
void AsebaNative_mathrot2 | ( | AsebaVMState * | vm | ) |
void AsebaNative_mathsin | ( | AsebaVMState * | vm | ) |
void AsebaNative_mathsqrt | ( | AsebaVMState * | vm | ) |
void AsebaNative_rand | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecadd | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecaddscalar | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecargbounds | ( | AsebaVMState * | vm | ) |
void AsebaNative_veccopy | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecdiv | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecdot | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecfill | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecmax | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecmin | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecmul | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecnonzerosequence | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecsort | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecstat | ( | AsebaVMState * | vm | ) |
void AsebaNative_vecsub | ( | AsebaVMState * | vm | ) |
void AsebaNativeFunction | ( | AsebaVMState * | vm, |
uint16 | id | ||
) |
Called by AsebaStep to perform a native function call.
Definition at line 35 of file LocalVirtualMachine.cpp.
static sint16 AsebaNativePopArg | ( | AsebaVMState * | vm | ) | [inline, static] |
void AsebaPutVmToSleep | ( | AsebaVMState * | vm | ) |
Called by AsebaVMDebugMessage when VM must put to node in deep sleep. Write an empty function to leave feature unsupported
Definition at line 965 of file challenge.cpp.
void AsebaResetIntoBootloader | ( | AsebaVMState * | vm | ) |
Called by AsebaVMDebugMessage when VM must restart the node and enter to the bootloader, write an empty function to leave feature unsupported
Definition at line 1029 of file challenge.cpp.
void AsebaSendDescription | ( | AsebaVMState * | vm | ) |
Called by AsebaVMDebugMessage when VM must send its description on the network.
Definition at line 81 of file asebatest.cpp.
void AsebaSendMessage | ( | AsebaVMState * | vm, |
uint16 | id, | ||
const void * | data, | ||
uint16 | size | ||
) |
Called by AsebaStep if there is a message (not an user event) to send. size is given in number of bytes.
Definition at line 4 of file aseba-test-natives-count.cpp.
void AsebaSendVariables | ( | AsebaVMState * | vm, |
uint16 | start, | ||
uint16 | length | ||
) |
Called by AsebaVMDebugMessage when some variables must be sent efficiently
Definition at line 76 of file asebatest.cpp.
void AsebaSetRandomSeed | ( | uint16 | seed | ) |
uint16 AsebaVMCheckBreakpoint | ( | AsebaVMState * | vm | ) |
uint16 AsebaVMClearBreakpoint | ( | AsebaVMState * | vm, |
uint16 | pc | ||
) |
void AsebaVMClearBreakpoints | ( | AsebaVMState * | vm | ) |
void AsebaVMDebugMessage | ( | AsebaVMState * | vm, |
uint16 | id, | ||
uint16 * | data, | ||
uint16 | dataLength | ||
) |
static sint16 AsebaVMDoBinaryOperation | ( | AsebaVMState * | vm, |
sint16 | valueOne, | ||
sint16 | valueTwo, | ||
uint16 | op | ||
) | [static] |
static sint16 AsebaVMDoUnaryOperation | ( | AsebaVMState * | vm, |
sint16 | value, | ||
uint16 | op | ||
) | [static] |
void AsebaVMEmitNodeSpecificError | ( | AsebaVMState * | vm, |
const char * | message | ||
) |
uint16 AsebaVMGetEventAddress | ( | AsebaVMState * | vm, |
uint16 | event | ||
) |
void AsebaVMInit | ( | AsebaVMState * | vm | ) |
uint16 AsebaVMRun | ( | AsebaVMState * | vm, |
uint16 | stepsLimit | ||
) |
void AsebaVMSendExecutionStateChanged | ( | AsebaVMState * | vm | ) |
uint8 AsebaVMSetBreakpoint | ( | AsebaVMState * | vm, |
uint16 | pc | ||
) |
uint16 AsebaVMSetupEvent | ( | AsebaVMState * | vm, |
uint16 | event | ||
) |
uint16 AsebaVMShouldDropPacket | ( | AsebaVMState * | vm, |
uint16 | source, | ||
const uint8 * | data | ||
) |
void AsebaVMStep | ( | AsebaVMState * | vm | ) |
void AsebaWriteBytecode | ( | AsebaVMState * | vm | ) |
Called by AsebaVMDebugMessage when VM must write its bytecode to flash, write an empty function to leave feature unsupported
Definition at line 1025 of file challenge.cpp.
const sint16 aseba_atan_table[20 *8+1] = { 652, 735, 816, 896, 977, 1058, 1139, 1218, 1300, 1459, 1620, 1777, 1935, 2093, 2250, 2403, 2556, 2868, 3164, 3458, 3748, 4029, 4307, 4578, 4839, 5359, 5836, 6290, 6720, 7126, 7507, 7861, 8203, 8825, 9357, 9839, 10260, 10640, 10976, 11281, 11557, 12037, 12425, 12755, 13036, 13277, 13486, 13671, 13837, 14112, 14331, 14514, 14666, 14796, 14907, 15003, 15091, 15235, 15348, 15441, 15519, 15585, 15642, 15691, 15736, 15808, 15865, 15912, 15951, 15984, 16013, 16037, 16060, 16096, 16125, 16148, 16168, 16184, 16199, 16211, 16222, 16240, 16255, 16266, 16276, 16284, 16292, 16298, 16303, 16312, 16320, 16325, 16331, 16334, 16338, 16341, 16344, 16348, 16352, 16355, 16357, 16360, 16361, 16363, 16364, 16366, 16369, 16369, 16371, 16372, 16373, 16373, 16375, 16375, 16377, 16376, 16378, 16378, 16378, 16379, 16379, 16380, 16380, 16380, 16382, 16381, 16381, 16381, 16382, 16382, 16382, 16382, 16382, 16382, 16384, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16383, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384, 16384 } [static] |
const sint16 aseba_sin_table[128+1] = {0, 403, 804, 1207, 1608, 2010, 2411, 2812, 3212, 3612, 4011, 4411, 4808, 5206, 5603, 5998, 6393, 6787, 7180, 7572, 7962, 8352, 8740, 9127, 9513, 9896, 10279, 10660, 11040, 11417, 11794, 12167, 12540, 12911, 13279, 13646, 14010, 14373, 14733, 15091, 15447, 15801, 16151, 16500, 16846, 17190, 17531, 17869, 18205, 18538, 18868, 19196, 19520, 19842, 20160, 20476, 20788, 21097, 21403, 21706, 22006, 22302, 22595, 22884, 23171, 23453, 23732, 24008, 24279, 24548, 24812, 25073, 25330, 25583, 25833, 26078, 26320, 26557, 26791, 27020, 27246, 27467, 27684, 27897, 28106, 28311, 28511, 28707, 28899, 29086, 29269, 29448, 29622, 29792, 29957, 30117, 30274, 30425, 30572, 30715, 30852, 30985, 31114, 31238, 31357, 31471, 31581, 31686, 31786, 31881, 31972, 32057, 32138, 32215, 32285, 32352, 32413, 32470, 32521, 32569, 32610, 32647, 32679, 32706, 32728, 32746, 32758, 32766, 32767, } [static] |
{ "math.nzseq", "write to dest the middle index of the largest sequence of non-zero elements from src, -1 if not found or if smaller than minLength", { { 1, "dest" }, { -1, "src" }, { 1, "minLength" }, { 0, 0 } } }
Description of AsebaNative_vecnonzerosequence