Machine code inerpreter
Go to file
2025-03-12 12:57:42 +05:00
.vscode jump 2025-03-12 12:57:42 +05:00
examples jump 2025-03-12 12:57:42 +05:00
src jump 2025-03-12 12:57:42 +05:00
.gitignore first commit 2024-11-15 09:03:33 +05:00
project.config test render loop 2025-03-09 18:35:56 +05:00
README.md sdl3 2025-02-27 22:53:27 +05:00
TODO.md jump 2025-03-12 12:57:42 +05:00

TCPU

Machine code interpreter written in pure C. Can execute programs up to 1 MEGABYTE (1048576 bytes) in size!!!

Building

  1. Install cbuild
  2. Install SDL3 and SDL3_image from package manager or source.
  3. cbuild build_exec_dbg
    

Assembly language

Instructions

code name arguments details
00 NOP ignored instruction
01 MOVC dst_register, value push constant value into dst_register
02 MOVR dst_register, src_register copy value from src_register to dst_register
03 ADD dst_register, src_register dst += src
04 SUB dst_register, src_register dst -= src
05 MUL dst_register, src_register dst *= src
06 DIV dst_register, src_register dst /= src
07 MOD dst_register, src_register dst %= src
08 SYS call system function
09 EXIT stop the program with exit code in ax

Registers

code name size (bits)
01 ax 32
02 bx 32
03 cx 32
04 dx 32

System functions

To call a system function you need to push values to registers and write SYS opcode. The return value of a function will will be avaliable in ax after call.

ax name bx cx dx details
0 read file number buffer pointer buffer size read data from file
1 write file number buffer pointer buffer size write data to file