Label - Target For Branch/Jump Command

A Label is a marker in the code. It has no functional operation other than being a pointer that the code can refer to. Labels within a task are local to that task and can be reused in other tasks. Labels outside of tasks are common to all tasks for use with the Copy command.

Commands referencing labels
When you load tasking from a device all the label names will be replaced with generic values making the code harder to read.

Syntax

LabelName:
BRA LabelName
When referencing a label you only use the name. For the location of the label you put a colon after the name.

Naming Rules
  • It is case-sensitive. When it is referenced in a command such as BRZ, 'Day' and 'day' are not the same thing.

  • It must start with a letter. 'FirstMarker' is fine but '1stMarker' is not.

  • It cannot contain any gaps. 'First_Marker' is fine but 'First Marker' is not.

  • Cannot contain any symbols but underscores.

When naming your labels try to make them descriptive and follow a formatting convention to make them visually distinct such as CamelCase or all_lowercase.

Examples

Example 1

Branching to a label.

{
LDA ~2       //Load ~2 memory location
CMP #0x00    //Compare if it is 0x00
BRZ P1       //If it matches branch to label "P1:" If it doesn't match continue.
CMP #0x01    //Compare if it is 0x01
BRZ P2       //If it matches branch to label "P2:"  If it doesn't match continue.
CMP #0x02    //Compare if it is 0x02
BRZ P3       //If it matches branch to label "P3:"  If it doesn't match continue.
CMP #0x03    //Compare if it is 0x03

BRZ P4       //If it matches branch to label "P4:"  If it doesn't match continue.

Null
P1:
Preset(A=4,P=1)
Null
P2:
Preset(A=4,P=2)
Null
P3:
Preset(A=4,P=3)
Null
P4:
Preset(A=4,P=4)
Null
}

Example 2

NewVector to a label.

{
LightsOn:
    Preset(A=5,P=1)
    Preset(A=8,P=1)
    NewVector(LightsOff)
    Null

LightsOff:
    Preset(A=5,P=4)
    Preset(A=8,P=4)
    NewVector(LightsOn)
    Null
}

Example 3

Copying from a label.
Not that the label is not within the task so any task can reference it.

OneTouch_Message: DyNet(0x1C,0x02,0x00,0x6B,0x00,0x00,0xFF)   //One Touch Message

Startup1()
{
Name="Start Task"
Copy OneTouch_Message, ~30,7 // Copy a default status message to ~30-36
}

Example 4

Loading from a label.
Loading from an array using the X register.

PresetOpcodeArray: Send2(0x00,0x01,0x02,0x03,0x0A,0x0B,0x0C,0x0D)
{
...
LDA ~15     //Load the preset number we want to send
ADD #4      //Add 4.  Arrays have an index of 4
SWAP        //Swap it into the X Register
LDA PresetOpcodeArray,x   //Grab the correct opcode from the array
STA ~3      //Store it into the opcode byte of the classic preset message.
TX ~0,2,7   //Send the preset message
Null
...
}

Example 5

Tx’ing from a label.
Using TX command to send a message to the spur only.

Room_Occupied: DyNet(0x1C,200,0x00,0x00,0x00,0x00,0xFF)   //P1 for occupancy Bogus
Room_UnOccupied: DyNet(0x1C,200,0x00,0x03,0x00,0x00,0xFF) //P4 for occupancy Bogus

Task1()
{
Name="Room Occupied"
      TX Room_Occupied,2,7  //Send Room Occupied preset to spur only
      Null
}