39 lines
1.6 KiB
Markdown
39 lines
1.6 KiB
Markdown
# TCPU
|
|
Machine code interpreter written in pure C. Can execute programs up to 1 MEGABYTE (1048576 bytes) in size!!!
|
|
|
|
## Building
|
|
1. Install [cbuild](https://timerix.ddns.net:3322/Timerix/cbuild.git)
|
|
2. ```sh
|
|
cbuild build_exec_dbg
|
|
```
|
|
|
|
## Assembly language
|
|
### Instructions
|
|
| code | name | arguments | details |
|
|
|------|------|-----------|---------|
|
|
| 00 | NOP | | ignored instruction |
|
|
| 01 | PUSH | `dst_register`, `value_size(bytes)`, `value` | push constant value into `dst_register` |
|
|
| 02 | MOV | `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) |
|
|
|------|------|-------------|
|
|
| 00 | ax | 32 |
|
|
| 01 | bx | 32 |
|
|
| 02 | cx | 32 |
|
|
| 03 | 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 |
|