Paulo-D2000/imrisc
RV32I(M) Emulator written in C
ImRISC is a RISC-V RV32I(M)(Zicsr) Emulator that runs DOOM!
Features
- M Multipy Extension (Optional), adds 'hardware' multplication
- Zicsr Extension (Optional?) adds extra CSR registers
- Disassembly with symbols & labels, register debug
- Graphical Interface with PC debug, Cpu speed & VGA FrameBuffer
- MMIO (ROM, WAD-ROM, RAM, BRAM, VGA, UART, SPI)
- Multi core support* (*Experimental, needs A atomic extension not yet implemented...)
Build Guide
In case of issues might be worth cheking the build guide for GLFW first at https://www.glfw.org/docs/3.3/compile.html
Linux (X11):
sudo apt install build-essential
sudo apt install xorg-dev
git clone https://github.com/Paulo-D2000/imrisc.git
cd imrisc
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --target ImRisc-gui --
Then run ImRisc-gui with .ImRisc-guiand enjoy!
Linux (Wayland):
sudo apt install build-essential
sudo apt install libwayland-dev libxkbcommon-dev wayland-protocols extra-cmake-modules
git clone https://github.com/Paulo-D2000/imrisc.git
cd imrisc
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --target ImRisc-gui --
Then run ImRisc-gui with .ImRisc-guiand enjoy!
Windows (General guide):
Dependencies:
GCC (MinGW-W64 > 12) (https://github.com/niXman/mingw-builds-binaries/releases)\
CMake (Cmake > 3.2) (https://cmake.org/download/)\
Ninja (https://github.com/ninja-build/ninja/releases) or Make (https://gnuwin32.sourceforge.net/packages/make.htm)\
(Optional) Git (https://git-scm.com/downloads)
If you have Git, run on cmd:
git clone https://github.com/Paulo-D2000/imrisc.git
cd imrisc
Or just download the repo as a zip and extract it to some place, then open cmd on that folder
Then run:
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --target ImRisc-gui --
Then run ImRisc-gui with ImRisc-gui.exeand enjoy!
Small Usage Guide:
File formats:
.binactual binaries, made with objcopy -B binary of the .elf file.symSymbols dump, made with obdjump -D of the .elf file.WADDOOM WAD File
You can change the core count on config.h, note this isn't working correctly right now!
You can load .bin files into RAM or ROM and add breakpoints at addresses, check the commented lines on main.cpp to see how its done (TODO: Document This).
TODO
- Update Documentation
- Add binary build guide & examples, linkerscript settings, uart addresses... etc...
- Add A atomic extension ?
- Add a cmd (maybe even gui?) interface that allows user to load binaries, setup extensions, configure Number of cores, etc...
- Add a new framebuffer 'type' (RGB[A]) instead of 256 colors pallete
Thanks to Lucas Teske for his amazing riscv-emulator that was base for a lot of the code on this project! Also thanks to smunaut for his bootloader and the riscv port of DOOM riscv_doom.
