Skip to content

LeoRiether/FPGRARS

Repository files navigation

FPGRARS

Fast Pretty Good RISC-V Assembly Rendering System

(name may change at any moment)

build status

FPGRARS is a RISC-V assembly simulator with a graphics display window and keyboard input, similar to RARS, but 200 times faster. If you want to run RISC-V assembly programs easily, learn assembly language, or even build a game, FPGRARS is a great option! (and if it isn't for you please open an issue :)

Running FPGRARS

First, head over to the latest release and download the appropriate executable. Then, you can run a RISC-V assembly file either by running ./fpgrars your_riscv_file.s in a terminal or by dragging the .s onto the executable. If you're on Linux, you might need to chmod +x fpgrars-x86_64-unknown-linux-gnu for FPGRARS to work.

If you have the Rust toolchain installed, you can also download FPGRARS by running cargo install fpgrars.

You may also want to check out Getting Started for a more detailed guide.

Documentation

Still in construction at https://leoriether.github.io/FPGRARS/

Supported ecalls

Description a7 Input Output
Print integer 1 a0 = integer to print
Print float 2 fa0 = float to print
Print string 4 a0 = address of the string
Read int 5 a0 = the read integer
Read float 6 fa0 = the read float
Sbrk 9 a0 = bytes to allocate (>= 0) a0 = address of the allocated chunk
Exit 10
Stop execution 110
Print char 11 a0 = the char
Time 30 a0 = low bits of milliseconds since unix epoch, a1 = high bits
Midi out 31 a0 = pitch (note), a1 = duration in ms, a2 = instrument (in range 0-127), a3 = volume (also 0-127) Async sound
Sleep ms 32 a0 = number of milliseconds to sleep
Midi out sync 33 a0 = pitch (note), a1 = duration in ms, a2 = instrument (in range 0-127), a3 = volume (also 0-127) Synchronous sound
Print hex integer 34 a0 = integer to print
Print unsigned integer 36 a0 = unsigned integer to print
Rand seed 40 does nothing for now
Rand int 41 a0 = random integer
Rand int range 42 a0 is discarded, a1 = upper bound a0 = random integer in [0, a1)
Rand float 43 fa0 = random float in [0, 1)
Clear screen 48 or 148 a0 = color, a1 = frame
Open file 1024 a0 = address of the null-terminated string for the path, a1 = 0 (read mode), 1 (write mode) or 9 (append mode) a0 = the file descriptor or -1 if error
Close file 57 a0 = a file descriptor
Seek 62 a0 = a file descriptor, a1 = the offset to seek, a2 = 0 (seek from the start of the file), 1 (from the current position) or 2 (from the end) a0 = the selected position from the start of the file
Read 63 a0 = a file descriptor, a1 = address of the buffer, a2 = maximum length to read a0 = number of bytes read or -1 if error
Write 64 a0 = a file descriptor, a1 = address of the buffer, a2 = length to write a0 = number of bytes written of -1 if error