Nyarlathotep

Nyarlathotep (named after a deity in the Cthulhu Mythos) is a esoteric language created by User:CosmoConsole in 2015, and has received a large amount of inspiration from Malbolge. Similarly to the aforementioned language, it is designed to be as difficult to program in as possible.

Memory
The memory consists of 6 436 343 (23 ^ 5) cells of 5 duodecatrits (base-23), giving them the range of 0 - 6 436 342 (inclusive). When initializing, the code is placed as ASCII directly in the memory and the rest is filled by adding the two previous cells together modulo 6 436 343.

Registers
There are four registers in use:


 * X acts as the accumulator and is used in a few instructions.
 * C is the code pointer, starting at 0.
 * R0 is a value that starts as 0.
 * R1 is also a value that starts as 0.

Internal variables

 * L stores the last instruction, and starts as 0.

Operation
The interpreter does this every cycle:

Set B to the data in memory at C.  'Decrypt' B.   Set A to CRC32 ( CRC32(L) + B * 39 + C ) mod 64. Set L to B.  Interpret A as an instruction. C is set to (C + 1) % 6436343. R0 is set to (R0 + 1) % 6436343. Rotate R0 one duodecatrit to the left. (2J8FM (795454) => J8FM2 (5422758)) R1 is set to (R0 + R1) % 6436343. Repeat until program hits a stop instruction.

Decryption
The decryption goes as follows. Set B to B mod 256. If the character represented in ASCII by B is in the decryption table: Set B to the index of that character. Else: Update C, R0, R1, but don't update L and continue with the next cell in the memory (NOP).

Decryption table
index in hexadecimal

Index: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F Char : N  M  0  b  v  C  4  V  w  ;  n  x  U  q  6  S    Index: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F Char : Z  5  P  J  i  Q  L  y  R  z  B  d  E  K  h  f     Index: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F Char : m  A  g  e  s  l  8  =  Y  u  r  D  W  7  k  o    Index: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F Char : 1  j  H  G  a  O  p  I  T  c  9  3  X  t  F  2 NM0bvC4Vw;nxUq6S Z5PJiQLyRzBdEKhf mAgesl8=YurDW7ko 1jHGaOpITc93XtF2 NM0bvC4Vw;nxUq6SZ5PJiQLyRzBdEKhfmAgesl8=YurDW7ko1jHGaOpITc93XtF2

Instructions
As per to A above:

Rest of the numbers run a random instruction.

Mine operator
# 0123456789ABCDEFGHIJKLM 0 0123456789ABCDEFGHIJKLM 1 1032547698BADCFEHGJILKL 2 23016745AB89EFCDIJGHMLK 3 32107654BA98FEDCJIHGHIJ 4 45670123CDEF89ABCDEFIJI 5 54761032DCFE98BADCFEJIH 6 67452301EFCDAB89EFCDEFG 7 76543210FEDCBA98FEDCFGF 8 89ABCDEF0123456789ABGFE 9 98BADCFE1032547698BABCD A AB89EFCD23016745AB89CDC B BA98FEDC32107654BA98DCB C CDEF89AB45670123456789A D DCFE98BA5476103254769A9 E EFCDAB89674523016745A98 F FEDCBA98765432107654567 G GHIJCDEF89AB45670123676 H HGJIDCFE98BA54761032765 I IJGHEFCDAB8967452301234 J JIHGFEDCBA9876543210343 K KLMHIJEFGBCD89A56723032 L LKLIJIFGFCDC9A967634301 M MLKJIHGFEDCBA9876543210

For every duodecatrit in both numbers. (The operation is commutative)

Example programs
There aren't any yet.

External resources

 * Reference Python (3) implementation