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.
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.
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.
- L stores the last instruction, and starts as 0.
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.
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).
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
As per to A above:
|0||Outputs the value of
|8||Take one character from standard input and store the ASCII character code to
|11||Stop the program execution.||
|17||Rotate current data at R0 one duodecatrit to the right and store to X as well.||
|19||Rotate current data at R1 one duodecatrit to the left and store to X as well.||
|26||Copy the value of R1 to C.||
|34||Copy the value of R0 to X.||
|39||Perform the 'mine operation' on R0 and X, store result to X only.||
|41||Perform the 'mine operation' on data in memory at R0 and X, store result to X and [R0].||
|45||Copy the value of R0 to R1.||
|47||Copy the value of R1 to R0.||
|52||Copy the value of memory at R1 to R0.||
|54||Copy the value of memory at R0 to R1.||
|60||Reserved for future expansion.||
Rest of the numbers run a random instruction.
# 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)
There aren't any yet.