-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Easy is a super stripped-down processor architecture. It’s loosely based on RISC, but simplified even further, basically giving you a small set of core instructions and expecting you to build more complex stuff on top of them.
Right now there’s no real CPU that runs Easy natively, so you run it through emulation on your current machine.
Using the Easy64 emulator, you can basically port Easy anywhere as a VM that reads bytecode.
Easy Assembly is pretty minimal. The instruction set looks like this:
mov, add, sub, mul, div, and, or, xor, nop, not, shl, shr, jmp, je, jne, jl, jg, cmp, call, ret, push, pop, hlt, inc, dec, load, store, entry.
The Easy64 emulator adds a couple extra instructions to make emulation practical:
import, syscall, print.
These are all classic assembly instructions. Nothing fancy,just enough primitives to let you build more complex behavior yourself.
The Easy assembler is intentionally simple and kinda restrictive but not in a bad way. It’s more about enforcing structure than limiting what you can do.
For example:
If you’re using load/store with a bss-type data structure, r10 acts as your pointer.
Also, all instructions are reversed compared to typical CISC-style assembly. For example:
mov value, register
basically means:
move the value into the register
It’s 20 in the default/classic setup, but you’re free to tweak the code and add more if you need them.
The VM is open-source, so you can extend it however you want. But if you’re thinking about actually building a CPU for it, the “official” / base design sticks to those 20 registers.
Check out the examples folder in the GitHub repo, go through the code and see how things are done. Since there’s basically no hard limit on what you can build, we started with simple stuff to explore and test features.
That said, you can just jump in and start writing your own code too, that’s honestly one of the best ways to get the hang of it.
The assembler isn’t as advanced as a C or Rust compiler, and its error messages are pretty basic. You’ll usually just get the line that caused the issue and a simple explanation of what went wrong.
We don’t recommend modifying the assembler, it already works well enough as is.
The emulator is mainly a testing tool, built just to check whether things run correctly. If you want, you can write your own version, it’s actually much less complex than the assembler.
The assembler doesn’t really follow the order you write your code in. It reorganizes everything based on its own internal structure.
The Easy assembler outputs things in this order:
