# M64
> :warning: This crate is in *pre-alpha* and should not be used for any
> purpose at this time.
A MAXCOM 64 personal computer emulator.
# Usage
## M64 assembly interpreter
``` bash
cargo install m64
m64 run my_program.m64
```
Example M64 assembly programs are available in `./samples`.
# Specs
## Instruction set
| MOV | |
| LOG | |
| PSH | |
| POP | |
| ADD | |
| SUB | |
| MUL | |
| DIV | |
| MOD | |
| CMP | |
| RUN | |
| RET | |
| YLD | |
| JMP | |
| JLT | |
| JGT | |
| JEQ | |
| JNE | |
| NOP | |
| HLT | |
## Memory Map *(NYI)*
| 0x0000 | 0x03E7 | screen contents | index of character in cell |
| 0x03E8 | 0x07CF | screen colors | 0xFB where F is foreground color and B is background color |
| 0x07D0 | 0x0E9F | character map | 8 bytes per character, each bit is a pixel, bytes are rows |
| 0x0EA0 | 0x0F9F | program stack | any data |
## Standard Library *(NYI)*
The M64 comes with a standard library of functions that can be called by pushing
the arguments to the stack and executing `RUN {function code}`.
| print | 0x00 | null-terminated string | |
| getch | 0x01 | block | ASCII code |
| time | 0x02 | | timestamp |