Next:
6.c.
Example Scripts
Previous:
6.a.
Maestro Script Language Basics
The following is the entire list of commands and keywords in the Maestro script language. The “stack effect” column specifies how many numbers are consumed and added to the stack. For example, the PLUS command takes off two numbers and returns one; so it has a stack effect of 2,+1. Commands with special effects will be marked with a *.
Keywords
keyword 
stack effect 
description 
BEGIN 
none 
marks the beginning of a loop 
ENDIF 
none 
ends a conditional block IF…ENDIF 
ELSE 
none 
begins the alternative block in IF…ELSE…ENDIF 
GOTO label 
none 
goes to the label label (define it with label:) 
IF 
1 
enters the conditional block if the argument is true (nonzero) in IF…ENDIF or IF…ELSE…ENDIF 
REPEAT 
none 
marks the end of a loop 
SUB name 
none 
defines a subroutine name 
WHILE 
1 
jumps to the end of a loop if the argument is false (zero) 
Control commands
command 
stack effect 
description 
QUIT 
none 
stops the script 
RETURN 
none 
ends a subroutine 
Timing commands
command 
stack effect 
description 
DELAY 
1 
delays by the given number of milliseconds 
GET_MS 
+1 
gets the current millisecond timer (wraps around from 32767 to 32768) 
Stack commands
command 
stack effect 
description 
DEPTH 
+1 
gets the number of numbers on the stack 
DROP 
1 
removes the top number from the stack 
DUP 
+1 
duplicates the top number 
OVER 
+1 
duplicates the number directly below the top, copying it onto the top 
PICK 
1,+1 
takes a number n between 0 and 63, then puts the nth number below the top onto the stack (0 PICK is equivalent to DUP) 
SWAP 
a,b → b,a 
swaps the top two numbers 
ROT 
a,b,c → b,c,a 
permutes the top three numbers so that the 3rd becomes the top and the others move down one position 
ROLL 
1,* 
takes a number n, then permutes the top n+1 numbers so that the n+1th becomes the top and all of the others move down one 
PEEK 
1,+1 
(Mini Maestro 12, 18, and 24 only) takes a number n, then copies the nth value on the stack (measured from the bottom) to the top of the stack 
POKE 
2,+1 
(Mini Maestro 12, 18, and 24 only) takes a number n, then removes the next value from the stack and puts it at the nth location on the stack (measured from the bottom) 
Mathematical commands (unary)
These commands take a single argument from the top of the stack, then return a single value as a result. Some of these have equivalents in C (and most other languages), listed in the “C equivalent” column below. We use “false” to mean 0 and “true” to mean any nonzero value. A command returning “true” always returns a 1.
command 
C equivalent 
description 
BITWISE_NOT 
~ 
inverts all of the bits in its argument 
LOGICAL_NOT 
! 
replaces true by false, false by true 
NEGATE 
– 
replaces x by x 
POSITIVE 
none 
true if and only if the argument is greater than zero 
NEGATIVE 
none 
true if and only if the argument is less than zero 
NONZERO 
none 
true (1) if and only if the argument is true (nonzero) 
Mathematical commands (binary)
These commands take two arguments from the top of the stack, then return a single value as a result. The order of the arguments, when important, is the standard one in mathematics; for example, to compute 1 – 2, you write “1 2 MINUS”. These commands all have equivalents in C (and most other languages), listed in the “C equivalent” column below.
command 
C equivalent 
description 
BITWISE_AND 
& 
applies the boolean AND function to corresponding bits of the arguments 
BITWISE_OR 
 
applies the boolean OR function to corresponding bits of the arguments 
BITWISE_XOR 
^ 
applies the boolean XOR function to corresponding bits of the arguments 
DIVIDE 
/ 
divides the arguments 
EQUALS 
= 
true if and only if the arguments are equal 
GREATER_THAN 
> 
true if and only if the first argument is greater than the second 
LESS_THAN 
< 
true if and only if the first argument is less than the second 
LOGICAL_AND 
&& 
true if and only if both arguments are true 
LOGICAL_OR 
 
true if and only if at least one argument is true 
MAX 
none 
selects the greater of the two arguments 
MIN 
none 
selects the lesser of the two arguments 
MINUS 
– 
subtracts the arguments 
MOD 
% 
computes the remainder on division of the first argument by the second 
NOT_EQUALS 
!= 
true if and only if the arguments are not equal 
PLUS 
+ 
adds the arguments 
SHIFT_LEFT 
<< 
shifts the binary representation of the second argument to the left by a number of bits given in the second argument (without wrapping) 
SHIFT_RIGHT 
>> 
shifts the binary representation of the first argument to the right by a number of bits given in the second argument (without wrapping) 
TIMES 
* 
multiplies the arguments 
Servo, LED, and other output commands
command 
stack effect 
description 
SPEED 
2 
sets the speed of the channel specified by the top element to the value in the second element (see Section 4.e) 
ACCELERATION 
2 
sets the acceleration of the channel specified by the top element to the value in the second element (see Section 4.e) 
GET_POSITION 
1,+1 
gets the position of the channel specified by the top element 
GET_MOVING_STATE 
+1 
true if any servos that are limited by speed or acceleration settings are still moving 
SERVO 
2 
sets the target of the channel specified by the top element to the value in the second element, in units of 0.25 μs 
SERVO_8BIT 
2 
sets the target of the channel specified by the top element to the value in the second element, which should be a value from 0 to 254 (see the Mini SSC command in Section 5.e) 
LED_ON 
none 
turns the red LED on 
LED_OFF 
none 
turns the red LED off (assuming no errors bits are set) 
PWM 
2 
(Mini Maestro 12, 18, and 24 only) enables the PWM output channel, with the period specified by the top element and the on time specified by the second element, both in units of 1/48 μs (see Section 4.a for more information about PWM) 
SERIAL_SEND_BYTE 
1 
(Mini Maestro 12, 18, and 24 only) removes the top number from the stack, interprets it as a single byte, and sends that byte to the TTL serial output (TX) 
Next:
6.c.
Example Scripts
Previous:
6.a.
Maestro Script Language Basics

