Ein kleiner, einfacher RV32I Instruction Set Simulator (ISS) in Rust.
Aktuell unterstuetzte Instruktionen:
add,subaddilw,swbeq,bnejal,jalrlui,auipcecall(als Halt)
Das Projekt ist absichtlich kompakt gehalten: mit minimalem ELF-Loader und alternativem Textformat mit 32-Bit-Maschinenwoertern.
Ohne Argument startet ein kleines Demo-Programm:
cargo runMit Programmdatei:
cargo run -- program.txtExplizit mit Flag:
cargo run -- --program program.txtMit Trace-Logging (pro Schritt):
cargo run -- --program program.txt --traceTrace als JSON-Lines (eine JSON-Zeile pro Schritt):
cargo run -- --program program.txt --trace --trace-format jsonMit ELF32-Datei (RISC-V, little-endian):
cargo run -- --elf program.elfSchrittlimit anpassen:
cargo run -- --elf program.elf --max-steps 500000Eine Instruktion pro Zeile, entweder dezimal oder hex (0x...).
Kommentare mit # sind erlaubt.
Beispiel:
# addi x1, x0, 5
0x00500093
# ecall
0x00000073
Der Loader unterstuetzt absichtlich nur einen kleinen, verstaendlichen Kern:
- ELF32
- little-endian
EM_RISCVPT_LOAD-Segmente
p_vaddr wird als Zieladresse in den Simulator-Speicher geladen.
Der Bereich p_memsz - p_filesz wird mit 0 aufgefuellt (BSS-Verhalten).
cargo test