We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.
Rogex
Jump to navigation
Jump to search

Rogex (or RGX) is an esoteric programming language created by Lebster.
In Rogex, there is a 256 cell long memory, with hexadecimal addresses (eg ff = 255). There is also a buffer, which is the equivalent of one memory cell.
Operations
Structure
In Rogex, each command has a certain structure, which is as follows:
*1 ( First character, essentially the command name ) *2 ( Second character, argument one of the command / first digit of cell address ) *3 ( Third character, argument two of the command / second digit of cell address )
Every command is formatted as such:
*1*2*3
EG:
A0F
Comments
Comments in Rogex can follow any of these formats:
[code] # comment (still comment) [code] // comment (still comment) [code] /* comment */ [code again]
Commands
The loop value, buffer and saved cell address all start as 0
| *1 | Operation | *2 | Explanation | *3 | Explanation |
|---|---|---|---|---|---|
| 0 | Get input to buffer | 0 or 1 | 0 = As number or 1 = As ASCII | 0-F | 0 = Base 10 or 1 = Hex |
| 1 | Print buffer | 0 or 1 | 0 = As number or 1 = As ASCII | 0-F | 0 = Base 10 or 1 = Hex |
| 2 | Print cell at saved address | 0 or 1 | 0 = As number or 1 = As ASCII | 0-F | 0 = Base 10 or 1 = Hex |
| 3 | Add buffer to cell | 0-F | Cell address | 0-F | Cell address |
| 4 | Subtract buffer from cell | 0-F | Cell address | 0-F | Cell address |
| 5 | Multiply buffer by cell | 0-F | Cell address | 0-F | Cell address |
| 6 | Divide cell by buffer | 0-F | Cell address | 0-F | Cell address |
| 7 | Increment the buffer | 0-F | Hex number | 0-F | Hex number |
| 8 | Decrement the buffer | 0-F | Hex number | 0-F | Hex number |
| 9 | Set the buffer | 0-F | Hex number | 0-F | Hex number |
| A | Print ASCII | 0-F | Hex ASCII value | 0-F | Hex ASCII value |
| B | Set saved address | 0-F | Cell address | 0-F | Cell address |
| C | Stop | 0 | Changes nothing | 0 | Changes nothing |
| D | Set the loop value to the value of cell | 0-F | Cell address | 0-F | Cell address |
| E | If the buffer is the loop value, jump to the corresponding F** in the program, otherwise do nothing | 0 | Changes nothing | 0 | Changes nothing |
| F | If the buffer is not the loop value, jump to the corresponding E** in the program, otherwise do nothing | 0 | Changes nothing | 0 | Changes nothing |
Implementations
Interpreter
Python interpreter:
import sys, re
if len(sys.argv)<2:
print("""Usage:
Rogex [-c] [filename]
-c : Interpret all following arguments as Rogex code and execute
filename: Run filename as Rogex code
""")
sys.exit(0)
elif sys.argv[1]=="-c":
prg=''.join(sys.argv[2:]).lower()
else:
f = open(sys.argv[1], "r");
prg = f.read().lower();
f.close();
prg = (re.compile('#(?=.*).*|\/\/(?=.*).*|\/\*(.*)\*\/',re.IGNORECASE).sub("",prg))
prg = (re.compile('[^a-f0-9]*', re.IGNORECASE).sub("", prg))
mem=[0]*256
prgPos=0
buff=0
sadr=0
lval=0
def prnt(s,a,b):
if a=='0':
if b=='0':
print(s,end='')
elif b=='1':
print(format(s,'x'),end='')
elif a=='1':
print(chr(s),end='')
while prgPos<len(prg):
op=prg[prgPos];
a1=prg[prgPos+1];
a2=prg[prgPos+2];
adr=int((a1+a2),16)
if op=='0':
if a1=='0':
# as base a2
if a2=='0':
buff=int(input("Input Base 10 Number: "))
elif a2=='1':
buff=int(input("Input Base 16 Number: "),16)
elif a1=='1':
# as ASCII
buff=ord(input("Input character: "))
elif op=='1':
prnt(buff,a1,a2)
elif op=='2':
prnt(mem[sadr],a1,a2)
elif op=='3':
mem[adr]+=buff
elif op=='4':
mem[adr]-=buff
elif op=='5':
mem[adr]*=buff
elif op=='6':
mem[adr]/=buff
elif op=='7':
buff+=adr
elif op=='8':
buff-=adr
elif op=='9':
buff=adr
elif op=='a':
print(chr(adr),end='')
elif op=='b':
sadr=adr
elif op=='c':
sys.exit(0)
elif op=='d':
lval=mem[int(str(adr),16)]
elif op=='e':
if buff == lval:
opened = 0
prgPos+=3
while prgPos < len(prg):
if prg[prgPos] == 'f' and opened == 0:
break
elif prg[prgPos] == 'e':
opened += 1
elif prg[prgPos] == 'f':
opened -= 1
prgPos += 3
elif op=='f':
if buff != lval:
closed = 0
prgPos-=3
while prgPos < len(prg):
if prg[prgPos] == 'e' and closed == 0:
break
elif prg[prgPos] == 'f':
closed += 1
elif prg[prgPos] == 'e':
closed -= 1
prgPos -= 3
prgPos+=3
Usage
Rogex.py [-c] [filename] -c : Interpret all following arguments as Rogex code and execute filename: Run filename as Rogex code
Online
Online tools for Rogex:
| Name | Description | Link |
|---|---|---|
| Online interpreter | Run Rogex code online | HERE |
| Encode any message | Convert any string to a Rogex program that will print that string | HERE |
| Decode any message | 'encode any message' but reversed! (does not actually run code so results may be incorrect) | HERE |
| An alternate arrangement of the python interpreter on TIO | Code goes into the code box rather than the arguments to give it a more authentic feel | Rearranged by JonoCode9374/Lyxal and used on CGCC |
Examples
Hello, world!
a48a65a6ca6ca6fa2ca20a77a6fa72a6ca64a21
Cat
010110
Truth-machine
000e00100f00100
Print Numbers 1 to 10
90b300d00901e00100701a20f00
Reciprocal of a Number
701300001600200