Revaver16

This is work in progress. It is not yet complete.

In this programming language, every command is a reverse of it self, so entering a command twice in a row is like a NOP. If you reverse the order of all the lines in the file and give the output of the first program as this program's input, you will get back the original input.

Commands are in a file, one each line. First, give input list. Output list is returned. A list entry is 2 bytes, no immediate duplicates like (1,2)(1,2). Main List, Intermediate List, all others Memory Lists (and a infinitely-long number for each).

These symbols can be used in place of numbers:
 * ! = First by

Commands:
 * (TR) TERMINATE: If Inter.List and all Mem.Lists are empty, end program.
 * (PP) PUSHPOP a b: Pushes (a,b) onto Main.List. If (a,b) is already on top, pops instead.
 * (MP) MEMPOINTER a b: If intdiv(p+a,b) (rounding down) is even, increase pointer by 'b', otherwise decrease. (If b=0, assume b=256)
 * (SI) SWAPING: Swaps Main.List with Inter.List.
 * (SM) SWAPMEM a: Swaps Main.List with Mem.List(p+a).