Advanced Light Controller Instruction Code

Über ALIC
Das Prinzip
So funktioniert die Code-Verarbeitung
Vorgaben und Definitionen
Assembler Syntax
Befehls-Referenz
Beispiele
ALIC Implementation für Microchip PICs
Links
Kontakt

Übersicht über die Befehle (sortiert nach Opcode):
Mnemonic Opcode Parameter Beschreibung Beispiel
LIGHTOFF 0x00 <delay> Turn Light Off for time <delay>
Andere Form von (BRIGHT 0,<delay>)
Beispiel
BRIGHT 0x00
-0xBF
<delay> Output Brightness value for time <delay>
Assembler-Syntax: BRIGHT <value>,<delay>
Stellt die Helligkeit auf den Wert <value> ein. Der nachfolgende Befehl wird nach der Zeit <delay> (in "Ticks") ausgeführt. Der Helligkeitswert wird hierbei im Opcode codiert!
Wertebereich:
value:  0..191 (128 entspricht 100%)
delay: 0..255 
Beispiel
LIGHTON 0x80 <delay> Turn Light On for time <delay>
Andere Form von (BRIGHT 128,<delay>)
Beispiel
DEFTICKLEN 0xC0 <time> Define Length of Tick
Definiert die Länge eines Ticks in Millisekunden.
Standard-Wert: 10 ms
Beispiel
DEFBRIGHT 0xC1 <value> Define Brightness Multiplier
Definiert einen Helligkeits-Multiplikator für den Ausgangs-Kanal.
Standardwert = 128 = *1.0
Beispiel
DEFSWITCH 0xC2 <x> Define Channel's Switch
Definiert einen anderen Steuerschalter, der dem Ausgangs-Kanal zugeordnet ist (= channel switch)
Standardeinstellung: x = Kanalnummer
Beispiel
DEFVAR 0xC3 <x> Define Channel's Variable
Definiert eine andere Steuervariable, die dem Kanal zugeordnet ist (= channel variable)
Standardeinstellung: x = Kanalnummer
Beispiel
DELAY 0xC8 <delay> Delay
Fügt eine Wartezeit von <delay> Ticks ein. Der vor diesem Befehl eingestellte Helligkeitswert wird nicht verändert.
Beispiel
JUMP 0xC9 <addr> Jump
Das Programm wird an Speicheradresse <addr> fortgesetzt.
Beispiel
SMOOTHOFF 0xCA
Turn Smooth Mode Off
Helligkeitsänderungen nachfolgender BRIGHT-Anweisungen erfolgen direkt auf den angegebenen neuen Wert, ohne Zwischenwerte. (Standardeinstellung)
Beispiel

SMOOTHON 0xCB
Turn Smooth Mode On
Änderungen zwischen den Helligkeitswerten nachfolgender BRIGHT-Anweisungen erfolgen kontinuierlich durch lineare Interpolation.
RNDJMP 0xCC <chance>,<addr> Random Jump
Das Programm wird mit der Wahrscheinlichkeit <chance> an Addresse <addr> fortgesetzt.
<chance> = 0..128 für nie bis immer.

Beispiel

RNDDLY 0xCD <maxticks> Random Delay
Das Programm wird nach einer zufällig erzeugten Wartezeit zwischen 0 und <maxticks> fortgesetzt.
RNDBRT 0xCE <min>,<max>,<delay> Output Random Brightness
Der Helligkeitswert wird zufällig im Bereich <min> bis <max> eingestellt und liegt für die Dauer <delay> dort an.
HALTSOFF 0xD0
Halt while Channel's Switch is Off
Hält bei ausgeschaltetem Steuerschalter die Programmausführung an dieser Stelle an, bis der Schalter eingeschaltet wird.

Beispiel
HALTSXOFF 0xD1 <x> Halt while Switch <x>  is Off
Hält bei ausgeschaltetem Steuerschalter <x> die Programmausführung an dieser Stelle an, bis der Schalter eingeschaltet wird.
HALTSON 0xD2
Halt while Channel's Switch is On
Hält bei eingeschaltetem Steuerschalter die Programmausführung an dieser Stelle an, bis der Schalter ausgeschaltet wird.
HALTSXON 0xD3 <x> Halt while Switch <x> is On
Hält bei eingeschaltetem Steuerschalter die Programmausführung an dieser Stelle an, bis der Schalter ausgeschaltet wird.
JSOFF 0xD4 <addr> Jump if Channel's Switch is Off
Wenn der dem eigenen Kanal zugeordnete Steuerschalter ausgeschaltet ist, wird das Programm an Speicheradresse <addr> fortgesetzt.
Beispiel



JSXOFF 0xD5 <x>,<addr> Jump if Switch <x>  is Off
Wenn der Steuerschalter <x> ausgeschaltet ist, wird das Programm an Speicheradresse <addr> fortgesetzt.
JSON 0xD6 <addr> Jump if Channel's Switch is On
Wenn der dem eigenen Kanal zugeordnete Steuerschalter eingeschaltet ist, wird das Programm an Speicheradresse <addr> fortgesetzt.
JSXON 0xD7 <x>,<addr> Jump if Switch <x> is On
Wenn der Steuerschalter <x> eingeschaltet ist, wird das Programm an Speicheradresse <addr> fortgesetzt.
JVB 0xD8 <val>,<addr> Jump if Channel's Variable is Below <val>
Wenn der Inhalt der dem Kanal zugeordneten Variablen kleiner ist als <val>, wird das Programm an Adresse <addr> fortgesetzt.

Beispiel


JVXB 0xD9 <x>,<val>,<addr> Jump if Variable X is Below <val>
Wenn der Inhalt Variablen <x> kleiner ist als <val>, wird das Programm an Adresse <addr> fortgesetzt.
JVAE 0xDA <val>,<addr> Jump if Channel's Variable is Above or Equal <val>
Wenn der inhalt der dem Kanal zugeordneten Variablen größer oder gleich <val> ist, wird das Programm an Adresse <addr> fortgesetzt.
JVXAE 0xDB <x>,<val>,<addr> Jump if Variable X is Above or Equal <val>
Wenn der inhalt der Variablen <x> größer oder gleich <val> ist, wird das Programm an Adresse <addr> fortgesetzt.
CLRS 0xDC
Clear Channel's Switch
Schaltet den dem eigenen Kanal zugeordneten Steuerschalter auf "aus".
Beispiel
CLRSX 0xDD <x> Clear Switch X
Der Steuerschalter <x> wird ausgeschaltet
SETS 0xDE
Set Channel's Switch
Schaltet den dem eigenen Kanal zugeordneten Steuerschalter auf "ein".
Beispiel
SETSX 0xDF <x> Set Switch X
Der Steuerschalter <x> wird eingeschaltet
BRIGHTV 0xE0 <delay> Output Brightness from Channel's Variable
Setzt die Helligkeit auf den Wert aus der Variablen, die dem Ausgangskanal zugeordnet ist  
Beispiel
BRIGHTVX 0xE1 <vx>, <delay> Output Brightness from Variable <vx>
Setzt die Helligkeit auf den Wert aus der Variablen <vx>  
SETV 0xE2 <value> Set Channel's Variable  to given value
Setzt die Variable, die dem Ausgangskanal zugeordnet ist, auf den Wert <value>
Beispiel
SETVX 0xE3 <value>, <vx> Set Variable <vx> to given value
Setzt die Variable <vx> auf den Wert <value>
COPYV 0xE4 <src> Copy contents of variable <src> into channel's variable
Der Inhalt der Variablen <src> wird in die Variable kopiert, die dem Ausgangskanal zugeordnet ist  
Beispiel
COPYVX 0xE5 <src>, <dest> Copy contents of variable <src> into variable <dest>
Der Inhalt der Variablen <src> wird in die Variable <dest> kopiert
ADDCV 0xE6 <const> Add constant value to channel's variable
Addiert den Wert <const> zum Inhalt der Variablen, die dem Ausgangskanal zugeordnet ist
Wertebereich für <const>: -128..+127
Das Ergebnis wird auf den Wertebereich 0..255 begrenzt, d.h. es gibt keinen Überlauf der Variablen.
Beispiel

ADDCVX 0xE7 <const>, <vx> Add constant value to variable <vx>
Addiert den Wert <const> zum Inhalt der Variablen <vx>
Wertebereich für <const>: -128..+127
Das Ergebnis wird auf den Wertebereich 0..255 begrenzt, d.h. es gibt keinen Überlauf der Variablen.
ADDV 0xE8 <src> Add contents of variable <src>  to channel's variable
Addiert den Inhalt der Variablen <src> zum Inhalt der Variablen, die dem Ausgangskanal zugeordnet ist
Wertebereich für Inhalt von <src>: -128..+127
Das Ergebnis wird auf den Wertebereich 0..255 begrenzt, d.h. es gibt keinen Überlauf der Variablen.
Beispiel

ADDVX 0xE9 <src>, <dest> Add contents of variable <src> to variable <dest>
Addiert den Inhalt der Variablen <src> zum Inhalt der Variablen <dest> und speichert das Ergebnis in <dest>
Wertebereich für Inhalt von <src>: -128..+127
Das Ergebnis wird auf den Wertebereich 0..255 begrenzt, d.h. es gibt keinen Überlauf der Variablen.
MULV 0xEA <src> Multiply channel's variable by contents of <src>
Der Inhalt der Variablen, die dem Ausgangskanal zugeordnet ist, wird mit dem Inhalt der Variablen <src> multipliziert.
(Multiplikator: 0..255, Festkomma, 128 entspricht dem Wert 1,0)

Beispiel
MULVX 0xEB <src>, <dest> Multiply contents of variable <dest> by contents of <src>
Der Inhalt der Variablen <dest> wird mit dem Inhalt der Variablen <src> multipliziert und in <dest> gespeichert.
(Multiplikator: 0..255, Festkomma, 128 entspricht dem Wert 1,0)
SCLUPV 0xEC <c1|var>, <c2|var>,
Scale Up channel's variable >> Details
Skaliert den Inhalt der Variablen, die dem Ausgangskanal zugeordnet ist, von Eingangs-Wertebereich <c1>..<c2> auf vollen Ausgangs-Wertebereich (0 bis 128)

Beispiel
SCLUPVX 0xED <c1|var>, <c2|var>, <vx>
Scale Up variable <vx> >> Details
Skaliert den Inhalt der Variablen <vx> von Eingangs-Wertebereich <c1>..<c2> auf den vollen Ausgangs-Wertebereich (0 bis 128)
SCLDWNV 0xEE <c1|var>, <c2|var>,
Scale Down channel's variable >> Details
Skaliert den Inhalt der Variablen, die dem Ausgangskanal zugeordnet ist, von vollen Eingangs-Wertebereich (0..128) herunter auf Ausgangs-Wertebereich <c1> bis <c2> 

Beispiel
SCLDWNVX 0xEF <c1|var>, <c2|var>, <vx>
Scale Down variable <vx> >> Details
Skaliert den Inhalt der Variablen <vx> vom vollen Eingangs-Wertebereich (0..128) herunter auf Ausgangs-Wertebereich <c1> bis <c2> 
RNDV 0xF0 <min|var>, <max|var> Load channel's variable with random value
Lädt die Variable, die dem Ausgangskanal zugeordnet ist, mit einem Zufallswert zwischen <min> und <max>

Beispiel
RNDVX 0xF1 <min|var>, <max|var>, <vx> Load variable <vx> with random value
Lädt die Variable <vx>  mit einem Zufallswert zwischen <min> und <max>
CLIPV 0xF2 <min|var>, <max|var>
Clip channel's variable to min/max value >> Details
Begrenzt den Inhalt der Variablen, die dem Ausgangskanal zugeordnet ist, auf <min>...<max>
Beispiel
CLIPVX 0xF3 <min|var>, <max|var>, <vx>
Clip variable <vx> to min/max >> Details
Begrenzt den Inhalt der Variablen <vx> auf <min>...<max>
P_RESET 0xFF
Program Reset
Setzt für den aktuellen Kanal den Programmzähler auf die Einsprungadresse zurück und aktiviert die folgenden Werte:
  • Ausgangs-Helligkeit: 0 (Licht aus)
  • Smooth-Modus: aus
  • Ticklänge: Default (10ms)
Schalterstellungen, Variablen und deren Zuordnungen bleiben unverändert.




counter