journal 2026-05-01

P29 moves the timer onto an MMIO map

p29riscvmmiointerrupts

P29 removes the P28 timer-control shortcut. Instead of writing custom CSRs at 0x7c0 and 0x7c1, software now writes memory-mapped platform registers.

Commands:

make -C projects/29_rv32i_mmio_platform/test
make -C projects/29_rv32i_mmio_platform/test act4

Results:

checkresult
External RAM plus MMIO UARTPASS
MMIO timer interrupt with mretPASS
External interrupt through platform shellPASS
ACT4/Sail rv32i/IPASS=39 FAIL=0 NOT RUN=0
HardeningNOT RUN
Official privileged testsNOT RUN

The new map is:

addressregister
0x1000_0000mtime
0x1000_0004mtimecmp
0x1000_1000UART status
0x1000_1004UART data

This is still a teaching platform, not a complete CLINT/PLIC story. But it is the right direction: timer and UART behavior are now reached by normal loads and stores, not testbench-only CSRs.

Next, P30 should stop hand-assembling every test program and add a tiny runtime: linker script, reset entry, trap handler, and small C or assembly examples that target this map.