┌─────────────────────────────────┐
0x0000_0000 │ ┌────────────────────────────┐ │
│ │ │ │
│ │ FLASH MEMORY │ │
│ │ │ │
0x0003_2000 │ └────────────────────────────┘ │
│ ┌────────────────────────────┐ │
│ │ RESERVED │ │
│ └────────────────────────────┘ │
0x0200_0000 │ ┌────────────────────────────┐ │
│ │ │ │
│ │ │ │
│ │ CLINT │ │
│ │ │ │
│ │ │ │
0x0200_FFFF │ └────────────────────────────┘ │
│ ┌────────────────────────────┐ │
│ │ RESERVED │ │
│ └────────────────────────────┘ │
0x0C00_0000 │ ┌────────────────────────────┐ │
│ │ │ │
│ │ │ │
│ │ PLIC │ │
│ │ │ │
│ │ │ │
0x1000_0000 │ └────────────────────────────┘ │
│ ┌────────────────────────────┐ │
│ │ RESERVED │ │
│ └────────────────────────────┘ │
0x1001_3000 │ ┌────────────────────────────┐ │
│ │ │ │
│ │ │ │
│ │ UART0 │ │
│ │ │ │
│ │ │ │
0x1001_3FFF │ └────────────────────────────┘ │
└─────────────────────────────────┘
The current implementation doesn't support vectored trap hanlers.
You can halt the execution at any time writing 255
to the x10
register and executing ecall
li x10, 255 // send halt signal
ecall
You can dump a section of memory to a a writer at any time writing the from
to x11
the to
to x12
and 254
to x10
. The default emulator will write dumps to a file and provides the argument --dump-folder
to define the location of the dumps, if not provided it will use the current directory.
// Dumps the flash memory
li x11, 0
li x12, 0x0003_2000
li x10, 254
ecall
Install the toolchain:
rustup target add rv32i-unknown-none-elf