example | ||
src | ||
.gitignore | ||
CMakeLists.txt | ||
flake.lock | ||
flake.nix | ||
README.md | ||
rve.nix |
A simple RISC-V emulator
This is a toy emulator for RISC-V, made for educational purposes. The goal is to have a base rv32i instruction set (the bare minimum) plus a M-extension for division and multiplication. In theory, it should be enough to execute simple C programs compiled with GCC and sprinkled with a few linker scripts. Of course, no libc because there's no OS.
Compiling and running
You'd need nix package manager in order to build the project. This is because installing cross-toolchain to compile an example project is difficult, and I don't know of other ways except nix that make it easy.
If you don't have it, install it like this:
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install
Now, to build the emulator:
nix develop
eval "$configurePhase"
ninja
As a result you should get an executable called rve
Cross-toolchain and an example program in C
There is an example program which you can compile. It requires some custom toolchain so currently not built with CMake. To compile it:
cd example
make
As a result, you'll get an example.raw
binary. To execute it:
./rve ../example/example.raw
The expected output of the example program is 40320
.