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 (
0x0000to0xFFFF) - 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 + src0b0001011- SUBTRACT:dest = dest - src0b0001100- MULTIPLY:dest = dest × src0b0001101- DIVIDE:dest = dest ÷ src0b0001110- MODULO:dest = dest % src0b0001111- INCREMENT:addr = addr + 10b0010000- DECREMENT:addr = addr - 10b0010001- POWER:dest = dest ^ src0b0010010- NEGATE:addr = -addr0b0010011- 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