RISC-V Virtual Machine

Overview

RVVM - The RISC-V Virtual Machine

RISC-V Logo

RISC-V CPU & System software implementation written in С

What's working

  • OpenSBI, custom firmwares boot and execute properly
  • Linux kernel boots! Although, without clint & timer it does not run init

What's done so far

  • Feature-complete RV32I instruction set
  • C, M, A instruction extensions
  • Extendable and fast instruction decoder
  • Physical memory
  • Memory mapping unit (MMU) with SV32 virtual addressing
  • TLB address caching (greatly speeds up memory operations)
  • MMIO handlers
  • CSR operations
  • UART 16550a-compatible text console
  • Bootrom loading
  • DTB loading, passing to firmware/kernel
  • ELF kernel loading

Usage

Currently builds on *nix systems using GNU Make. Actual code however is cross-platform and more build targets are going to be supported, including Windows, or even embedded systems. The bootrom.bin file is a user-provided raw binary, loaded at 0x80000000 address where it starts execution, and device.dtb is a DTB file containing description of the machine.

git clone https://github.com/LekKit/RVVM
cd RVVM
make
cd release.linux.x86_64
./rvvm_x86_64 bootrom.bin -dtb=device.dtb

Our team

  • LekKit: Instruction decoding, RAM/MMU/TLB implementation, RV32ICA ISA, privileged ISA, lots of fixes
  • Mr0maks: Initial ideas, C/M extensions, VM debugger, CSR work
  • cerg2010cerg2010: ELF loading, important fixes and refactoring
  • Hoping to see more contributors here

TODO

  • Debug the available functionality and make sure it's conforming to the specs
  • Timer, CLINT
  • Successfully running Linux userspace software (currently hangs at "Freeing unused kernel memory; Run /init as init process")
  • Floating-point extensions
  • Refactor the code; Make internal APIs usable for both 32 & 64 bit VMs
  • Basic peripherals, some kind of storage
  • A lot more...
  • JIT? RV64? Userspace emulation?
Comments
  • Add Haiku host support

    Add Haiku host support

    I am an author of Haiku operating system RISC-V support and I am grad to see there are some interest in Haiku by RVVM developers.

    Test FreeBSD, HaikuOS (FreeBSD generic kernel boots but i have no idea how to mount rootfs, too lazy to look at Haiku)

    Some time ago I experimented in running Haiku in RVVM and got some results. First I made RVVM running on Haiku (patch is here). And then I try to adapt Haiku so it can run as guest in RVVM. Result can be seen in screenshot. It is not trivial to adapt Haiku guest for RVVM because Haiku ATA and PS/2 drivers code is very x86-centered, so patches are not yet upstreamed.

    Haiku is booted in RVVM by commad like this:

    rvvm -mem 512M -res 800x600 --rv64 \
    -image haiku-minimum.image \
    haiku_loader.riscv
    

    haiku_loader.riscv is Haiku boot loader for bare metal RISC-V virtual machines (TinyEMU and QEmu are currently fully supported). It is responsible for loading kernel, boot drivers, configuration and some hardware information.

    In this issue I only ask about Haiku host support, I think guest support should be done on Haiku side.

    bca0fe983aa79e9a0842bcafeba1a2c100558aa8

    enhancement 
    opened by X547 118
  • Absolute positioned input device support

    Absolute positioned input device support

    Currently RVVM support only relative-positioned PS/2 mouse emulation that require pointer capture. It is annoying and limiting because it do not work properly on touchscreens and tablets with digital pen. TinyEMU and QEmu supports absolute positioned pointer.

    It can be implemented with i2c HID or USB HID.

    enhancement 
    opened by X547 84
  • PLIC interrupts stop working after some time

    PLIC interrupts stop working after some time

    Tested on Haiku host and guest, no SMP guest.

    PS/2 mouse received interrupts and data log:

    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 0)
    AlteraPs2::HandleInterrupt
     ff 03 00
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 0)
    AlteraPs2::HandleInterrupt
     ff 0d 00
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 0)
    AlteraPs2::HandleInterrupt
     ff 08 00
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 0)
    AlteraPs2::HandleInterrupt
     00 0b 00
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 0)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    altps2_interrupt_unlocked(irq_enabled: 1, irq_pending: 1)
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    WARN: Overflow in ringbuf 0x11318aadabd0! size=1024, consumed=1024, len=1
    
    notabug 
    opened by X547 35
  • Failed to build openSBI.

    Failed to build openSBI.

    Hi, I have built risc-v linux toolchain, linux kernel, and uBoot, and try to build openSBI. After generate fw_jump.bin in opensbi/build/platform/generic/firmware ./rvvm_riscv fw_jump.bin -kernel linux_Image -image rootfs.img -rv64 -mem 2G -smp 2 -res 1280x720 It will loop forever, like this OpenSBI

    Is this problem is caused by openSBI or RVMM and how can I successfully execute RVMM?

    many thanks!

    question 
    opened by OliveLake 4
  • Online demo: kernel panic

    Online demo: kernel panic

    [    8.477060] /dev/root: Can't open blockdev
    [    8.570120] VFS: Cannot open root device "nvme0n1" or unknown-block(0,0): error -6
    [    8.740940] Please append a correct "root=" boot option; here are the available partitions:
    [    8.914860] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
    [    9.073880] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---
    
    opened by X547 3
  • Implement blk_dev API and own file API

    Implement blk_dev API and own file API

    • [x] Linux support
    • [x] Windows support
    • [x] ~~Implement aio support in IO Thread~~
    • [x] ATA first step refactoring
    • [x] Rewrite ATA using blk_dev API
    • [x] Check OSX & FreeBSD support
    • [x] Write documentation to new API's
    opened by 0xCatPKG 1
  • Add one more error code for the rvvm_attach_mmio

    Add one more error code for the rvvm_attach_mmio

    • Introduce new error code: RVVM_VM_IS_RUNNING_ERR for the rvvm_attach_mmio API function
    • Add important information in the rvvm_attach_mmio's documentation.
    opened by kvxmmu 0
  • M intrinsics for RVJIT ARM backend

    M intrinsics for RVJIT ARM backend

    This implementation of M extension works only on armv7 and aarch32. For older arm like armv6 need call/make own implementations of multiplication,division (gcc and clang provide it).

    opened by Mr0maks 0
  • Online demo: Input/SDL/other problems

    Online demo: Input/SDL/other problems

    • Buttons HID_KEY_MINUS and HID_KEY_EQUAL aren't reported, even tho native SDL build works fine
    • Any way to lazy load the FS image? Downloading entire rootfs at page load seems wasteful. Tried using synchronous XHR, but it seems overly complicated and not supported well in Emscripten.
    • No way to use touch keyboard on Android, etc. Needs help from JS side.
    • Host cursor is visible (Minor nuisance for proper cursor integration)
    • When in fullscreen, input isn't working at all
    • Temporary mouse/keyboard lockups (Perhaps I2C HID related?)
    bug enhancement 
    opened by LekKit 0
  • Implement IMSIC and APLIC according to AIA spec

    Implement IMSIC and APLIC according to AIA spec

    RISC-V Advanced Interrupt Architecture (AIA) specification: https://github.com/riscv/riscv-aia/releases/download/1.0-RC1/riscv-interrupts-1.0-RC1.pdf.

    Reference code (QEmu):

    • https://github.com/qemu/qemu/blob/master/include/hw/intc/riscv_imsic.h
    • https://github.com/qemu/qemu/blob/master/hw/intc/riscv_imsic.c
    • https://github.com/qemu/qemu/blob/master/include/hw/intc/riscv_aplic.h
    • https://github.com/qemu/qemu/blob/master/hw/intc/riscv_aplic.c
    opened by X547 0
  • Hibernate / resume (and discussing other ideas)

    Hibernate / resume (and discussing other ideas)

    A neat feature that would probably be easier here than a real VM would be dumping memory and state to a hibernate file and allowing the VM to be resumed from that file. Would enable hot migrate of VMs, sleep/wake, etc.

    enhancement 
    opened by adamierymenko 13
  • Haiku OS guest support

    Haiku OS guest support

    Milestones, progress

    • [x] Out-of-tree Haiku boots using M-mode haiku_loader under RVVM with ATA drive
    • [x] Nightly Haiku EFI boots through U-Boot with NVMe (Unstable framebuffer, app_server crashes, NVMe in polling mode)
    • [x] Input devices with upstream Haiku drivers support (See #58)
    • [ ] Network card with upstream Haiku drivers support (RTL8169, but need stable tap_user first)
    • [ ] Verify other utility devices (RTC, syscon) work. Are goldfish or DS1742 RTCs supported in Haiku?
    • [ ] Fix NVMe IRQ loss with Haiku EFI (Doesn't happen in QEMU)
    • [x] Fix Haiku EFI bootloader crashing with new U-Boot efifb (Somehow works now, weird fluke?...)
    • [ ] Fix Haiku EFI bootloader crashing in SMP (Doesn't happen in QEMU)
    • [x] NVMe support in M-Mode haiku_loader
    enhancement help wanted 
    opened by LekKit 80
  • Instruction how to run Linux

    Instruction how to run Linux

    Are there any recommended Linux disk images and firmware sets that are confirmed to work? I tried your kernels from this comment, but after switching to NVMe it do not boot anymore.

    question 
    opened by X547 23
Owner
LekKit
LekKit
Doom classic port to lightweight RISC‑V

Doom classic port to lightweight RISC-V This is a port to try and make adapting/running doom to simple RISC-V platform easier with the code to adapt w

Sylvain 56 Dec 1, 2022
An MQTT-based Virtual Wall for ESP8266 Devices and Gerber files to make the IR hat; this code and board can easily be adapted to be ANY infrared controller/remote!

Roomba-Virtual-Wall-ESP8266-MQTT An MQTT-based Virtual Wall for ESP8266 Devices I made this based off of the IRSend, IRremoteESP8266, and EspMQTTClien

null 8 Sep 20, 2021
ESP8266 powered Xilinx Virtual Cable - Xilinx WiFi JTAG!

Xilinx Virtual Cable Server for ESP8266 Overview ESP8266 implementation of XVC (Xilinx Virtual Cable) protocol based on xvcd

Dhiru Kholia 10 Dec 6, 2022
Brutally effective DNS amplification ddos attack tool. Can cripple a target machine from a single host. Use with extreme caution.

Brutally effective DNS amplification ddos attack tool. Can cripple a target machine from a single host. Use with extreme caution.

thescientist 2 Jan 1, 2023
Professor Terence Parr has taught us how to create a virtual machine Now it is time to pwn virtual machine

My First real world CTF Simple Virtual Machine Challenge description Professor Terence Parr has taught us how to create a virtual machine Now it is ti

null 1 Feb 17, 2022
RISC-V Virtual Machine

RVVM - The RISC-V Virtual Machine RISC-V CPU & System software implementation written in С What's working OpenSBI, custom firmwares boot and execute p

LekKit 309 Jan 3, 2023
A virtual network Differential GNSS server-client project using Precise Point Positioning (PPP). Global coverage. Without physical base station construction needed. An open-source virtual base station approach.

Virtual-Network-DGNSS-Project This project is the software implementation for a publicly available, open-source, client/server VN-DGNSS implementation

null 13 Oct 24, 2022
TinyVM is a small, fast, lightweight virtual machine written in pure ANSI C.

TinyVM is a virtual machine with the goal of having a small footprint. Low memory usage, a small amount of code, and a small binary. Building can be

Joseph Kogut 3k Dec 27, 2022
Simple Virtual Machine with its own Bytecode and Assembly language.

BM Simple Virtual Machine with its own Bytecode and Assembly language. Build We are using nobuild build system which requires a bootstrapping step wit

Tsoding 87 Jan 1, 2023
NDS port of the uxn virtual machine

uxnds Quick and simple port of the uxn virtual machine to the NDS console. By default, uxnds will run /uxn/boot.rom. It also supports reading files fr

Adrian Siekierka 106 Dec 12, 2022
Microvm is a virtual machine and compiler

The aim of this project is to create a stack based language and virtual machine for microcontrollers. A mix of approaches is used. Separate memory is used for program and variable space (Harvard architecture). An interpreter, virtual machine and compiler are available. A demostration of the interpreter in action is presented below.

null 10 Aug 14, 2022
Web runtime for the uxn virtual machine.

webuxn A light-weight port of the uxn virtual machine to the web via WebAssembly. Demos life.rom darena.rom animation.rom musictracker.rom Bring Your

Bruno Garcia 56 Aug 24, 2022
WasmEdge Runtime is a high-performance, extensible, and hardware optimized WebAssembly Virtual Machine for automotive, cloud, AI, and blockchain applications.

WasmEdge Runtime is a high-performance, extensible, and hardware optimized WebAssembly Virtual Machine for automotive, cloud, AI, and blockchain applications.

null 5.1k Jan 5, 2023
A port of the Uxn virtual machine to the ESP32

Uxn An assembler and emulator for the Uxn stack-machine, written in ANSI C. Build Linux To build the Uxn emulator, you must have SDL2. If you wish to

Maxime ANDRÉ 27 Mar 24, 2022
A very minimal type-2 hypervisor built using Linux Kernel Virtual Machine for Linux.

wiser A very minimal type-2 hypervisor built using Linux Kernel Virtual Machine for Linux. Following project is under-development expect unfinished co

flouthoc 248 Sep 24, 2022
kvm-host is a minimalist type 2 hypervisor using Linux Kernel-based Virtual Machine (KVM), capable of running Linux kernel partially.

kvm-host kvm-host is a minimalist type 2 hypervisor using Linux Kernel-based Virtual Machine (KVM), capable of running Linux kernel partially. Build a

null 91 Dec 28, 2022
Encrypted shellcode injector with basic virtual machine evasion using C++

C++ PE Injector Overview Fully undetectable shellcode injector written in C++ with customizable XOR payload encryption/decryption and basic antivirus

Kampourakis Emmanouil 5 Apr 5, 2022
Simple emulator for the extremely popular Chip-8 Virtual Machine.

C8_Emulator [System Structure Reference] #@@@@@@@@@@@. @@@@@@@@@@@@@@@@,

Digvijay Singh Shekhawat 1 Nov 6, 2021
A virtual machine hardware tool that gives you an escape option for when your VM locks you in (when it freezes, and also traps your mouse).

A virtual machine hardware tool that gives you an escape option for when your VM locks you in (when it freezes, and also traps your mouse). A secondary mouse that only activates once you press it.

Sean P. Myrick V19.1.7.2 2 Oct 30, 2022
Epitech Corewar - Réalisation d'un compilateur de RedCode (Assembleur) et d'une Virtual Machine qui interprète les fichiers '".cor" et les exécutes.

Corewar Réalisation d'un compilateur de RedCode (Assembleur) et d'une Virtual Machine qui interprète les fichiers '".cor" et les exécutes. Description

Mikael VALLENET 9 May 12, 2022