USI
USI, short for Unknown Source of Intervention, is an esolang based on the method of implementing of compiling one language to another, in which a counter is used as the program counter, and then when it has a certain value, a certain effect takes place. It could perhaps be argued that USI is a metalanguage, in which the described language acts like Emmental, in which it modifies its own interpreter.
Memory
USI stores its memory in counter, which names are nonnegative integers. There is a theoretically infinite "supply" of counters to take from, all of which initially zero. Every time a command is ran, every counter is incremented. Every counter value is also specified in the start of the program, like:
a1 = 3 a5 = 9 a2 = a5 + 7
Notice the an, which gets the n'th counter. These may be "nested", like for example aaa8, however this can only be used on the right hand side. When one counter is set to another counters value "plus" something, then it forever "follows it", so when the referenced counter changes value, all other counters also do. The only operations possible are plus and minus. Note that in this special cases, the absolute value is always taken when updating. Recursive definitions of any kind not allowed. If dereference ever causes recursion anyways, its just set to 0.
Additionally to the counters, there's also a "Binary" array, in which each bit corresponds to a line of the program. These are all initially 1
Semantics
After the counter assignment, the program is a list of "instruction definitions" for each counter. It has three arguments. x(which must be a counter), n and m, the last of which may be any single number, a counter, or a counter plus or minus some value, aswell as a single line number y(1 indexed). Every iteration of the program, every counter is checked by these definitions. And if for some counter mod a given m value is equal to some given n value, line y has its bit flipped, all of which are checked one after another going up to down. If two or more checks all flip the same line, then they cancel out, and it's left with its original value, no matter the parity. When some line has a 0 bit, it is not checked. Then after this, every counter is incremented. The program halts when none of the conditions apply(among the active lines), or when modulo by 0.
Syntax
For some line with the values x,n,m,y it is written as:
x % m ?= n . -> y
and the syntax for counter assignment has already been given.
Constructs
For some register an and some register am they can be checked for equality:
an % an + 1 ?= am . -> y
this flips y if they are equal.