2D-Reverse

2D-Reverse is a esoteric programming language invented by User:Zzo38. It is a reversible programming language. There are 2 memory-spaces, which are 2D infinite in all directions, and the value of each is 2 integers, a horizontal value and vertical value (it can be represented by a ordered pair or a complex number), all values are starting at zero. Each memory space has its own pointer. There is also 1 program pointer that can be in one space in the program, and a direction (N, S, E, W). It starts at the $ and going east. The program pointer will wrap around the program area.

Commands

 * \ or / = Program pointer reflects off of the mirror.
 * 1 = Move first memory pointer in same direction as program pointer is moving.
 * 2 = Move second memory pointer in same direction as program pointer is moving.
 * $ = Program starts here.
 * @ = Program can end here.
 * s = Swap values at first memory pointer and second memory pointer.
 * X = Acts as / if value at first memory pointer (both horizontal and vertical) is zero, or \ if is non-zero.
 * +</tt> = Value at first memory pointer is adjusted 1 space by direction of program pointer. (Ex: (0,0) W = (-1,0) and (6,7) N = (6,8))
 * =</tt> = Horizontal value of value at first memory pointer is XORed by horizontal value of value at second memory pointer.
 * x</tt> = Acts as \ if horizontal value at first memory pointer is zero, or / if is non-zero.
 * C</tt> = If program pointer east, then value at first memory pointer is rotated clockwise (as a complex number: multiply by -i), if program pointer west, then value at first memory pointer is rotated counter-clockwise (as a complex number: multiply by +i), if north or south then it does nothing.
 * .</tt> or space = Does nothing.
 * ;</tt> = Program pointer jumps to next command past next ; in same direction as it is moving. If there isn't any, then it wraps around the program area to the next ; command.

Examples
If value at pointer is (1,0) or (0,0), it will switch the value: /+ X +\ $X \..@ \. . ./ Move memory pointer right $1@

Move memory pointer left /.\ $\1\@ \./

Loop while not zero (put inside-loop code at * and extend the other lines with periods or spaces to match the length): /.2*.\      =    . $2s+s=X. .. .x=2@ \. .. ./

I believe this makes it Turing-complete.