A pluggable virtual machine for constrained environments.
Fuste is a programmability adapter and virtual machine stack designed for integration with Robles, Ramate's implementation of BFA protocols.
Note
Currently, Fuste implements only the RV32I ISA. Since Fuste is intended as a programmability stack and does not ultimately have general opinions about the ISA, we may choose to implement other ISAs as Fuste virtual machines in the future.
- Review the programs in the
tests/toolchainworkspace before you begin writing your own. - Ensure you have built
fuboxand that is available on yourPATH. - Configure a workspace with the desired
env/fustecrates. - Configure the toolchain similar to
tests/toolchain. You can change the memory layout in the linker script if you like. - Write your program:
#![no_std]
#![no_main]
use fuste::println;
pub fn add(a: u32, b: u32) -> u32 {
a + b
}
fuste::entry! {
fn main() -> Result<(), ()> {
let mut j = 0;
for i in 0..10 {
assert_eq!(i, i);
j += i;
j = add(j, i);
println!("Hello, world!");
println!("i: {}, j: {}", i, j);
}
Ok(())
}
}- Run!
cargo run --target riscv32i-ramate-fuste-elf.json -p my-fuste-programenv/fuste provides the following:
fuste-ecallfor defining basicecallinterrupt APIs with an implementing machine.fuste-exitfor defining program termination interrupts.fuste-writefor making one-way writes to a system.println!is implemented usingfuste-write.fuste-channelfor opening a kernel channel with a stack-allocated buffer. Network requests are implemented usingfuste-channel.fusteincludes all of the above for those who want a complete stack-based set of symbols.fuste-gallocdefines a global heap allocator for those interested in writing heap programs. It is not infustebecause--owing to the highly constrained targets for the virtual machine--purely stack-based programs are preferred.
fubox currently implements a debugging form of the fuste environment.
| Task | Description |
|---|---|
| Upcoming Events | High-priority event issues with planned completion dates. |
| Release Candidates | Feature-complete versions linked to events. |
| Features & Bugs | High-priority feature and bug issues. |