RGB4D

From Esolang
Jump to navigation Jump to search

RGB4D is a 4d esoteric programming language created by ProtoByter.

Commands

Colour (RGBA)
Action
Anything with alpha != 255 Ends the program
Directional
(255, 127, 0, 255) Changes the code execution direction to +X
(255, 127, 127, 255) Changes the code execution direction to -X
(255, 191, 0, 255) Changes the code execution direction to +Y
(255, 191, 127, 255) Changes the code execution direction to -Y
(255, 63, 0, 255) Changes the code execution direction to +Z
(255, 63, 127, 255) Changes the code execution direction to -Z
(255, 255, 0, 255) Changes the code execution direction to +W
(255, 255, 127, 255) Changes the code execution direction to -W
Maths
(Resultant value stored in A)
(127, 127, 0, 255) Add the current cell value to A
(127, 127, 31, 255) Subtract the current cell value from A
(127, 127, 63, 255) Multiply A by current cell value
(127, 127, 127, 255) Divide A by current cell value
(127, 127, 158, 255) Increment A
(127, 127, 191, 255) Decrement A
Storage
See storage notes below
(63, 127, 0, 255) Increment the cell pointer
(63, 127, 127, 255) Decrement the cell pointer
(63, 255, 0, 255) Store A to current cell
(63, 255, 255, 255) Load A from current cell
(63, 255, 63, 255) Store random value into A - from MT19937
Conditionals
When true, direction is set to +X, otherwise it is set to -X
(191, 63, 127, 255) Current cell value == A
(191, 127, 127, 255) Current cell value > A
(191, 191, 127, 255) Current cell value < A
(191, 127, 0, 255) Current cell value >= A
(191, 191, 0, 255) Current cell value =< A
(191, 255, 0, 255) Current cell value != A
Functions
See function notes below
(255, 255, 255, 255) Run function A
(0, 0, 0, 255) Define function A
(255, 0, 0, 255) End function definition
I/O
(255, 127, 255, 255) Take one character as input and store in A
(255, 0, 255, 255) Print ASCII Character for A

Storage notes

RGB4D uses a cell based storage system (with a cell pointer and 256 uint16_t cells). It also has an Accumulator (A) which is uint16_t and is used by most instructions which operate on a value

Function notes

Functions are specified by a number, which is usually passed as A. The parameters for a function should be in the cells including and after the cell denoted by the cell pointer. Functions may also be loaded from an ELF or DLL library (NOTE: This feature isn't required and thus won't be in all interpreters that are made). If a function is loaded from a library then it is numbered as the function's number in that library but with 10000 (This number isn't meaningful in any way, it's just arbritary) added to it.

Rules

For storage, see storage notes above

X, Y and Z are all limited to having a max value of 16. W is limited by the maximum unsigned byte that the target can support (so for a 64bit CPU it'd be 2^64 whilst for an 8bit CPU it'd be limited to 256)

Programs

Truth Machine program by ProtoByter

W2
I 127 127 158 255 0 0 0 0 ; Get 4 into A
I 127 127 158 255 1 0 0 0
I 127 127 158 255 2 0 0 0
I 127 127 158 255 3 0 0 0
I 63 255 0 255 4 0 0 0 ; Store A to the current cell
I 255 191 0 255 5 0 0 0 ; Change to +Y
I 127 127 158 255 5 1 0 0 ; Add 8 onto that to get 12
I 127 127 158 255 5 2 0 0 
I 127 127 158 255 5 3 0 0
I 127 127 158 255 5 4 0 0
I 127 127 158 255 5 5 0 0
I 127 127 158 255 5 6 0 0
I 127 127 158 255 5 7 0 0
I 127 127 158 255 5 8 0 0
I 127 127 63 255 5 9 0 0 ; Multiply!
I 63 255 0 255 5 10 0 0 ; Store 48 to the cell
I 255 127 255 255 5 11 0 0 ; Get input
I 255 255 0 255 5 12 0 0 ; Move to next W plane
I 255 127 127 255 5 12 0 1 ; Set direction to -X
I 255 0 255 255 4 12 0 1 ; Print character
I 191 255 0 255 3 12 0 1 ; Check if A != cell