Rogex

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
Category:2020 Category:Cell-based Category:Low-level Category:Languages Category:Implemented