Modulous
Jump to navigation
Jump to search
Modulous is a stack based esoteric programming language that is somewhat inspired by the assembly language. Made by User:Abyxlrz
Please read everything here
What?
A module is a command surrounded by square brackets []
I'll refer the command pointer as the module pointer.
Commands
Command/Module | Effect | Example |
---|---|---|
[JMP {F or B} {number of modules}] |
makes the module pointer jump a {number of modules} (forwards if f and back if b) | [JMP F 1]
|
[JMP {F or B} {number of modules} IF {second number}] |
makes the module pointer jump the {number of modules} (forwards if f and back if b) if the top element of the stack is the {second number} | [JMP F 1 IF 0]
|
[JMP {F or B} {number of modules} NIF {second number}] |
makes the module pointer jump the {number of modules} (forwards if f and back if b) if the top element of the stack is not the {second number} | [JMP F 1 NIF 0]
|
[ADD {number}] |
adds a {number} to the top element of the stack | [ADD 100]
|
[SUB {number}] |
subtracts a {number} from the top element of the stack | [SUB 5]
|
[RST] |
resets the module pointers position (puts the pointer at the start of the program) | [RST]
|
[PSH {INT or STR} {number or string (string in quotes)}] |
pushes the {number or string} to the stack | [PSH INT 66] or [PSH STR "Hello!"]
|
[PSH {variable}] |
sets the {variable} to the top number of the stack | [PSH VAR1]
|
[POP] |
pops the top element from the stack | [POP]
|
[SWP] |
swaps the top two elements in the stack | [SWP]
|
[PRT {INT or STR}] |
prints the top number of the stack as a number or an ASCII character and pops it | [PRT INT] or [PRT STR]
|
[PRT {variable} {INT or STR}] |
prints the {variable} as 1 ASCII character or number and the {variable} keeps its value | [PRT VAR2 INT] or [PRT VAR2 STR]
|
[INP {INT ir STR}] |
takes input from the user and pushes it on to the stack | [INP INT] or [INP STR]
|
[END] |
ends the program | [END]
|
[DUP] |
duplicates the top number of the stack | [DUP]
|
[RND {number}] |
randomly generates a number between the zero and the {number} and pushes it to the stack | [RND 100]
|
[{variable}+{number}] |
adds the {number} to the {variable} | [VAR1+10]
|
[{variable}-{number}] |
subtracts the {number} from the {variable} | [VAR1+1]
|
Other things
Other things (rules) |
---|
Negative numbers are allowed. |
If there is nothing on the stack and you add a number then you'll get an error. |
If a string gets pushed to the stack it gets inverted first. example [PSH STR “hello”] -> "h" "e" "l" "l" "o" -> "o" "l" "l" "e" "h" then gets pushed onto the stack one by one.
|
there are only four variables (VAR1, VAR2, VAR3 and VAR4) they can store a single number each. |
Anything pushed to a variable stays on the stack. |
If the interpreter inspects a number on the stack / compare a number (with a command) then the number will not be popped |
The program ends when you reach the end of the program |
INT is for integer and STR is for string |
Example programs
Hello World program
[PSH STR “Hello, World!”][PRT STR][JMP B 1 NIF 0]
Cat program
[INP STR][PRT STR][JMP B 1 NIF 0][JMP B 3]
Truth-machine
[INP INT][JMP F 3 IF 0][JMP F 4 IF 1][RST][PRT INT][END][DUP][PRT INT][JMP B 2]
Counter
[PSH INT 0][DUP][PRT INT][ADD 1][JMP B 3]