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