Files
libretro/emulators/rvvm.yml
T
Abdessamad Derraz 50a98d708f chore: move rvvm to 0.7-git at e7214ef
CMakeLists.txt sets RVVM_VERSION 0.7, at the old pin too. Upstream
changes are CPU, CSR and DHCP fixes, the loaders are unchanged.
2026-10-23 16:37:06 +02:00

81 lines
3.2 KiB
YAML

emulator: RVVM
type: libretro
core_classification: official_port
source: "https://github.com/LekKit/RVVM"
upstream: "https://github.com/LekKit/RVVM"
profiled_date: "2026-03-25"
source_commit: "e7214efa23a9ab72c489c456889af79aa552873f"
core_version: "0.7-git"
display_name: "RVVM"
cores: [rvvm]
systems: [riscv]
# RVVM emulates a RISC-V machine (rv64imafdcb or rv32ima). The libretro core
# loads a .rvvm plain-text config file specifying bootrom, kernel, nvme drives,
# memory, CPU mode, cmdline, and framebuffer resolution.
#
# The core does NOT use the RetroArch system directory. All firmware paths are
# specified in the .rvvm config file and resolved relative to its directory.
# The core chdir()s to the .rvvm file's parent before initializing the VM.
#
# The .rvvm config format (parsed by retro_load_game):
# bootrom=/path/to/fw_payload.bin
# kernel=/path/to/Image
# nvme=/path/to/rootfs.img
# mem=512
# smp=2
# rv64
# cmdline=root=/dev/nvme0n1 rootflags=discard rw console=tty0
#
# The libretro binding uses an older RVVM API (rvvm_load_bootrom, 4-param
# rvvm_create_machine) that has been renamed in the current upstream
# (rvvm_load_firmware, 3-param rvvm_create_machine). The binding may not
# compile against RVVM HEAD without updates.
# Source references:
# libretro binding: src/bindings/libretro/libretro.c
# config parsing: src/bindings/libretro/libretro.c:332-421 (retro_load_game)
# VM init + loading: src/bindings/libretro/libretro.c:288-330 (vm_init)
# firmware loading: src/core/rvvm.c:629-636 (rvvm_load_firmware)
# kernel loading: src/core/rvvm.c:638-647 (rvvm_load_kernel)
# FDT loading: src/core/rvvm.c:649-656 (rvvm_load_fdt, standalone only)
# standalone CLI: src/main.c:211-280 (rvvm_cli_configure)
files:
- name: "fw_payload.bin"
path: "rvvm/fw_payload.bin"
required: true
source_ref: "src/bindings/libretro/libretro.c:309-314, src/core/rvvm.c:629-636"
note: >
M-mode firmware loaded at 0x80000000. Typically OpenSBI with U-Boot
payload (fw_payload.bin) or standalone (fw_jump.bin). Referenced by
the bootrom= key in the .rvvm config.
- name: "Image"
path: "rvvm/Image"
required: false
source_ref: "src/bindings/libretro/libretro.c:316-318, src/core/rvvm.c:638-646"
note: >
S-mode kernel payload loaded at offset 0x200000 (rv64) or 0x400000
(rv32) from RAM base. Only needed with fw_jump.bin as bootrom.
Referenced by the kernel= key in the .rvvm config.
- name: "machine.dtb"
path: "rvvm/machine.dtb"
required: false
mode: standalone
source_ref: "src/main.c:220, src/core/rvvm.c:649-656"
note: >
Custom Flattened Device Tree. The core auto-generates a DTB based on
machine configuration. The libretro binding does not parse a dtb= key
in the .rvvm config, so this is only usable via the standalone CLI
(-dtb flag).
notes:
firmware_sources: >
OpenSBI: https://github.com/riscv-software-src/opensbi/releases.
Pre-built images for RVVM: https://github.com/LekKit/RVVM/wiki/Running
info_firmware_count: >
.info declares 0 firmware. The core loads firmware via
user-specified paths in the .rvvm config, not from system_dir.