journal 2026-05-01

P30 adds a compiled tiny runtime

p30riscvruntimelinker

P30 keeps the P29 MMIO platform and changes the software workflow. The directed program now comes from runtime/start.S plus runtime/link.ld, built with riscv64-elf-gcc, converted to a byte image, and sent through the UART loader.

Commands:

make -C projects/30_rv32i_tiny_runtime/test
make -C projects/30_rv32i_tiny_runtime/test act4

Results:

checkresult
Compiled tiny runtimePASS
Runtime UART sequence RTEPASS
Runtime timer interruptPASS
Runtime external interruptPASS
ACT4/Sail rv32i/IPASS=39 FAIL=0 NOT RUN=0
HardeningNOT RUN
Official privileged testsNOT RUN

One subtle toolchain detail: modern assemblers require rv32i_zicsr for CSR instructions. The core already implements those CSR opcodes; the build flag is the assembler being precise, not a new full privileged-compliance claim.

The important shift is that future tests can now be programs with labels, sections, linker symbols, and disassembly, instead of piles of hand-encoded words in a testbench.

Next, P31 can either introduce a tiny C-level runtime on top of this assembly entry or start broadening the machine-mode software tests.