ESOPUNK/Commands
Jump to navigation
Jump to search
← ESOPUNK
Commands
Against all rules and regulations, I'm using manstyle formatting:
 Bold: Type exactly as shown
 Italic: Replace with appropriate argument.
Command  Usage  Equivalent (C) 

Manipulation  
COPY SRC DEST

Copy the value from SRC [RI] to DEST [R]  DEST = SRC;

ADDI A B DEST

Take the sum of A [RI] and B [RI], and place it in DEST [R]  DEST = A + B;

SUBI A B DEST

Take the difference of A [RI] and B [RI], and place it in DEST [R]  DEST = A  B;

MULI A B DEST

Take the product of A [RI] and B [RI], and place it in DEST [R]  DEST = A * B;

DIVI A B DEST

Take the ratio of A [RI] and B [RI], and place it in DEST [R]  DEST = A / B;

MODI A B DEST

Take the mod of A [RI] and B [RI], and place it in DEST [R]  DEST = A % B;

SWIZ A B DEST

Swizzle A [RI] and B [RI], and place it in DEST [R]  
Branching  
MARK LABEL

Mark the line with LABEL [L].  LABEL:

JUMP LABEL

Unconditionally jump to LABEL.  goto LABEL;

TJMP LABEL

If the T register is truthy, jump to LABEL. Otherwise, noop.  if(T){goto LABEL;}

FJMP LABEL

If the T register is falsy, jump to LABEL. Otherwise, noop.  if(!T){goto LABEL;}

Testing  
TEST A = B

Test if A [RI] and B [RI] are equal. Set the T register to 1 or 0 based on the result.  T=(A==B?1:0);

TEST A > B

Test if A [RI] is greater than B [RI]. Set the T register to 1 or 0 based on the result.  T=(A>B?1:0);

TEST A < B

Test if A [RI] is less than B [RI]. Set the T register to 1 or 0 based on the result.  T=(A<B?1:0);

Lifecycle  
REPL LABEL

Create a copy of this EXA and jump to LABEL [L] in the copy.  if(fork()==0){goto LABEL;}

HALT

Terminate this EXA.  exit(0);

KILL

Kill a random EXA.  
Communication  
MODE

Toggle the M register between local and global mode.  
VOID M

Read and discard a value from the M register.  
TEST MRD

If the M register is readable without blocking, set the T register to 1, else 0. 