RMIPS is a MIPS R3000 virtual machine simulator written in Rust and based on VMIPS.
Check the releases page for precompiled binaries.
To build from source, first install Rust then run the following:
git clone https://github.com/starfleetcadet75/rmips.git
cd rmips
cargo build --release
Install the gcc-mips-linux-gnu
package in order to cross-compile for MIPS targets.
Use the examples directory as a starting point for creating ROMs.
RMIPS exposes a GDB stub that can be used for debugging emulated programs.
Start RMIPS with the --debug
flag to enable the GDB server:
$ cargo run ./examples/build/emptymain_le.rom --debug
Interpreting ROM file as Little-Endian
Mapping ROM image (./examples/build/emptymain_le.rom, 223 words) to physical address 0x1fc00000
Mapping RAM module (1024KB) to physical address 0x00000000
Mapping Halt Device to physical address 0x01010024
Mapping Test Device to physical address 0x02010000
*************[ RESET ]*************
Waiting for a GDB connection on "127.0.0.1:9001"...
You can then connect to it from another shell with gdb-multiarch
:
$ gdb-multiarch emptymain_le.elf
(gdb) target remote 127.0.0.1:9001
(gdb) break begin
(gdb) c
Note: The ROM file does not contain any debugging information. Use the ELF program with GDB so that it can show source information.
- VMIPS
- MIPS R3000 Manual
- MIPS32 Architecture For Programmers Volume I: Introduction to the MIPS32 Architecture
- MIPS32 Architecture For Programmers Volume II: The MIPS32 Instruction Set
- MIPS32 Architecture For Programmers Volume III: The MIPS32 Privileged Resource Architecture
- Software Solutions for Single Instruction Issue, in Order Processors
- GNU AS MIPS Dependent Features
- Detecting MIPS Emulation
See the LICENSE file.