RVController
============

RVController is a program for use in Luacontrollers (from the mesecons mod) in Luanti.
It emulates a single RISC-V hart and a configurable amount (64KiB default) of RAM.

Features:
* RV32IMACBZicfilp_Zicntr_Zicond_Zicsr_Zifencei_Zihintpause_Zilsd_Zimop_Zabha_Zacas_Zalasr_Zawrs_Zcb_Zclsd_Zcmop_Zcmp_Zcmt_Zbkb_Zbkx_Xh3bextm instruction set provides:
 - 32-bit address space
 - 32 32-bit registers (31 general-purpose + 1 zero register)
 - Selectable endianness
 - Multiply/divide instructions
 - Bit manipulation including crossbar permutation and multiple-bit extraction
 - Atomic memory operations via load-reserved/store-conditional, compare-and-swap, or math/bitwise operations directly on memory
 - Byte/halfword/word atomic memory operation sizes
 - Conditional zero instructions
 - Freely mixable 16/32-bit instruction lengths
 - Performance counters and timers
 - Pause hint for power management
 - Wait-for-reservation-set instructions to watch for memory changes
 - Single-instruction function prologues/epilogues and jump tables
 - Compatibility with future MOP-based extensions
 - Forward-edge control-flow integrity via landing pads
* Mutable ISA via writable bits in misa CSR
* Mesecons and digilines I/O
* Configurable RAM size and clock speed
* Mesecons, digilines, and timer interrupts
* Support for the privileged architecture (currently M-mode only), including:
 - Configurable interrupt masking
 - Built-in trap handler, or replace it with your own
 - Optional vectored interrupt routing
 - Double-trap detection
* Built in machine-code monitor with help system and basic debugging support (including breakpoint)

Specifications:
RVController is intended to be compliant with the following specifications:
* RV32I Base Integer Instruction Set, Version 2.1
* "Zifencei" Extension for Instruction-Fetch Fence, Version 2.0
	- Note: Implemented as a 'nop' instruction as memory is always consistent (see note on RVWMO below)
* "Zicsr" Extension for Control and Status Register (CSR) Instructions, Version 2.0
* "Zicond" Extension for Integer Conditional Operations, Version 1.0.0
* "Zicntr" Extension for Counters, Version 2.0
* "Zimop" Extension for May-Be-Operations, Version 1.0
* "M" Extension for Integer Multiplication and Division, Version 2.0
	- Note: This implies the following:
	- * Zmmul Extension, Version 1.0
* "A" Extension for Atomic Instructions, Version 2.1
	- Note: This implies the following:
	- * "Zalrsc" Extension for Load-Reserved/Store-Conditional Instructions
	- * "Zaamo" Extension for Atomic Memory Operations
* RVWMO Memory Consistency Model, Version 2.0
	- Note: The actual implemented memory model is significantly more strict (memory is always consistent, there is no cache)
* "Ztso" Extension for Total Store Ordering, Version 1.0
* "C" Extension for Compressed Instructions, Version 2.0
	- Note: This implies the following:
	- * "Zca" Extension for Code Size Reduction, Version 1.0.0
* Zcb: Extension for Code Size Reduction, Version 1.0.0
* "Zcmop" Compressed May-Be-Operations Extension, Version 1.0
* Zcmp: Extension for Code Size Reduction, Version 1.0.0
* Zcmt: Extension for Code Size Reduction, Version 1.0.0
* "B" Extension for Bit Manipulation, Version 1.0.0
	- Note: This implies the following:
	- * Zba: Extension for Address generation, Version 1.0.0
	- * Zbb: Extension for Basic bit-manipulation, Version 1.0.0
	- * Zbs: Extension for Single-bit instructions, Version 1.0.0
* "Zihintpause" Extension for Pause Hint, Version 2.0
* Zilsd, Zclsd: Extensions for Load/Store pair for RV32, Version 1.0
* "Zabha" Extension for Byte and Halfword Atomic Memory Operations, Version 1.0
* "Zacas" Extension for Atomic Compare-and-Swap (CAS) Instructions, Version 1.0.0
* "Zalasr" Atomic Load-Acquire and Store-Release Instructions, Version 1.0
* "Zawrs" Extension for Wait-on-Reservation-Set instructions, Version 1.01
* Zbkb: Extension for Bit-manipulation for Cryptography, Version 1.0.0
* Zbkx: Extension for Crossbar permutations, Version 1.0.0
* Zicfilp: Control Flow Integrity - Landing Pad
* Xh3bextm: Hazard3 bit extract multiple
	- Note: Defined in the Hazard3 reference manual, available at https://github.com/Wren6991/Hazard3/releases/download/v1.1/hazard3.pdf
* Machine-Level ISA, Version 1.13
* "Smdbltrp" Double Trap Extension, Version 1.0

For full specification text, visit https://docs.riscv.org/reference/home/index.html

Documentation files:
* _start_here.txt: This file
* loader.txt: How to set up and use the hex loader, also includes wiring diagrams, read this one if you want to load existing software
* toolchain.txt: Cross-toolchain setup, needed if you want to build software and don't already have a riscv32(be)-none-elf toolchain
* monitor.txt: Setup and operation of the built-in machine-code monitor
* ecall.txt: Available M-mode ecall functions
* csr.txt: Control and status registers
* mmio.txt: Memory-mapped I/O
* instructions.txt: List of all supported instructions, sorted by extension
