User:Hasin Israk Toaha
Paradigm(s) | Imperative |
---|---|
Designed by | 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 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