Tonnyi
Paradigm(s) | Imperative |
---|---|
Designed by | User:Hasin Israk Toaha |
Appeared in | 2025 |
Computational class | Turing complete |
Reference implementation | Unimplemented |
File extension(s) | .ton |
Tonnyi is an esoteric programming language and educational interpreter created by User:Hasin Israk Toaha in 2025. The language is characterized by its use of pure binary opcodes for all instructions and Java-based implementation that uses BigDecimal
for high-precision arithmetic operations.
Overview
Tonnyi is an assembly-like language where all instructions are written using their 7-bit binary opcode strings (0b0001010
). The language features 44 implemented instructions out of 128 possible opcodes, with operations including memory manipulation, arithmetic, bitwise operations, control flow, and I/O.
The interpreter simulates a 64KB memory space addressable with 4-digit hexadecimal values (0x0000
to 0xFFFF
) and supports both integer and floating-point operations with arbitrary precision.
Language Specification
Memory Model
- Memory Space: 64KB addressable memory (
0x0000
to0xFFFF
) - Addressing: 4-digit hexadecimal values (e.g.,
0x001A
,0xFFFF
) - Immediate Values: Prefixed with
#
(e.g.,#100
,#3.14159
,#-42
)
Syntax
Programs are written in text files with .ton
extension. The basic syntax consists of:
- Instructions:
BINARY_OPCODE operand1 operand2
- Labels: Defined on their own line ending with colon (
:
) - Comments: Start with
//
Example instruction: 0b0001010 0x002A 0x002B
(Add values at addresses)
Instruction Set
Tonnyi implements 44 instructions across several categories:
System Operations
0b0000000
- HALT: Stops program execution0b0000001
- NOP: No operation0b0000010
- DUMP MEMORY: Prints all non-zero memory values (debug mode only)
Memory Operations
0b0000011
- PRINT: Prints value at address0b0000100
- LOAD IMMEDIATE: Loads immediate value into destination0b0000101
- LOAD FROM MEMORY: Copies value from source to destination0b0000110
- MOV: Alias for LOAD FROM MEMORY0b0000111
- STORE: Alias for LOAD FROM MEMORY0b0001000
- SWAP: Swaps values at two addresses0b0001001
- CLEAR: Sets address to zero
Arithmetic Operations
0b0001010
- ADD:dest = dest + src
0b0001011
- SUBTRACT:dest = dest - src
0b0001100
- MULTIPLY:dest = dest × src
0b0001101
- DIVIDE:dest = dest ÷ src
0b0001110
- MODULO:dest = dest % src
0b0001111
- INCREMENT:addr = addr + 1
0b0010000
- DECREMENT:addr = addr - 1
0b0010001
- POWER:dest = dest ^ src
0b0010010
- NEGATE:addr = -addr
0b0010011
- ABSOLUTE:addr = |addr|
Bitwise Operations
0b0010100
- AND: Bitwise AND0b0010101
- OR: Bitwise OR0b0010110
- XOR: Bitwise XOR0b0010111
- NOT: Bitwise NOT0b0011000
- SHIFT LEFT: Left shift0b0011001
- SHIFT RIGHT: Right shift (arithmetic)
Comparison & Control Flow
0b0011010
- COMPARE: Compares two values, sets internal flag0b0011011
- JUMP: Unconditional jump to label0b0011100
- JUMP IF ZERO: Jump if comparison result == 00b0011101
- JUMP IF NOT ZERO: Jump if comparison result != 00b0011110
- JUMP IF EQUAL: Jump if comparison result == 00b0011111
- JUMP IF NOT EQUAL: Jump if comparison result != 00b0100000
- JUMP IF GREATER: Jump if comparison result > 00b0100001
- JUMP IF LESS: Jump if comparison result < 00b0100010
- CALL: Push current PC and jump to subroutine0b0100011
- RETURN: Pop return address and return from subroutine
Stack Operations
0b0100100
- PUSH: Push value onto call stack0b0100101
- POP: Pop value from call stack
I/O Operations
0b0100110
- INPUT: Read number from stdin into address0b0100111
- PRINT CHAR: Print value as ASCII character0b0101000
- PRINT STRING: Print null-terminated string
Special Operations
0b0101001
- RANDOM: Store random number (0-100) in address
Debug Operations
0b0101010
- DEBUG MODE ON: Enable verbose debug output0b0101011
- DEBUG MODE OFF: Disable verbose debug output
Examples
Hello World
// Load immediate values for 'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '!' 0b0000100 0x1000 #72 // 'H' 0b0000100 0x1001 #101 // 'e' 0b0000100 0x1002 #108 // 'l' 0b0000100 0x1003 #108 // 'l' 0b0000100 0x1004 #111 // 'o' 0b0000100 0x1005 #32 // ' ' 0b0000100 0x1006 #87 // 'W' 0b0000100 0x1007 #111 // 'o' 0b0000100 0x1008 #114 // 'r' 0b0000100 0x1009 #108 // 'l' 0b0000100 0x100A #100 // 'd' 0b0000100 0x100B #33 // '!' 0b0000100 0x100C #0 // Null terminator // Print the string starting at address 0x1000 0b0101000 0x1000 // Halt the program 0b0000000
Addition Program
// Read two numbers and print their sum 0b0100110 0x2000 // INPUT first number 0b0100110 0x2001 // INPUT second number 0b0000101 0x2002 0x2000 // COPY first number 0b0001010 0x2002 0x2001 // ADD second number 0b0000011 0x2002 // PRINT result 0b0000000 // HALT
Implementation
The Tonnyi interpreter is implemented in Java and uses BigDecimal
for all arithmetic operations, providing high-precision calculations. The interpreter performs two passes over the source code: first to collect labels, and second to execute instructions.
Computational Class
Though not formally proven, Tonnyi appears to be Turing complete as it supports:
- Conditional jumps
- Unbounded memory (within 64KB simulation)
- Subroutine calls with a stack
- Arbitrary memory manipulation