diff options
| author | cheapie <cheapiephp@gmail.com> | 2026-10-30 09:09:20 -0500 |
|---|---|---|
| committer | cheapie <cheapiephp@gmail.com> | 2026-10-30 09:09:20 -0500 |
| commit | a16b984f06ca52be0785073ee2c21fcae301fff3 (patch) | |
| tree | 78dd6761af6088d27e791a533bcb73a974cb3c89 /c/inline | |
| parent | 1feb4eefe87b555a64d51e08eca7315b30521345 (diff) | |
| download | rvcontroller-a16b984f06ca52be0785073ee2c21fcae301fff3.tar rvcontroller-a16b984f06ca52be0785073ee2c21fcae301fff3.tar.gz rvcontroller-a16b984f06ca52be0785073ee2c21fcae301fff3.tar.bz2 rvcontroller-a16b984f06ca52be0785073ee2c21fcae301fff3.tar.xz rvcontroller-a16b984f06ca52be0785073ee2c21fcae301fff3.zip | |
Add console interrupt support
Diffstat (limited to 'c/inline')
| -rw-r--r-- | c/inline/Makefile | 20 | ||||
| -rw-r--r-- | c/inline/inline.c | 25 | ||||
| -rw-r--r-- | c/inline/rvcontroller.ld | 45 |
3 files changed, 90 insertions, 0 deletions
diff --git a/c/inline/Makefile b/c/inline/Makefile new file mode 100644 index 0000000..4a1fb6e --- /dev/null +++ b/c/inline/Makefile @@ -0,0 +1,20 @@ +all: inline.hex + +inline.o: inline.c + clang -target riscv32-none-elf -I../rvcontroller-libraries -march=rv32imacb_zicntr_zicond_zicsr_zifencei_zihintpause_zilsd_zclsd_zabha_zacas_zbkb_zbkx_zcb_zcmp_zcmt -ffreestanding -O3 -c -o inline.o inline.c + +inline.elf: ../rvcontroller-libraries/rvcontroller-init.o ../rvcontroller-libraries/rvcontroller-ecalls.o inline.o + clang -target riscv32-none-elf -T rvcontroller.ld -nostdlib -nostartfiles -Xlinker --no-warn-rwx-segments -o inline.elf ../rvcontroller-libraries/rvcontroller-init.o inline.o ../rvcontroller-libraries/rvcontroller-ecalls.o + +dump: inline.elf + riscv32-none-elf-objdump -d inline.elf + +inline.hex: inline.elf + riscv32-none-elf-objcopy -O ihex inline.elf inline.hex + +load: inline.hex + bash -c "wl-copy < inline.hex" + +clean: + rm -f inline.hex inline.elf inline.o init.o + diff --git a/c/inline/inline.c b/c/inline/inline.c new file mode 100644 index 0000000..c8db8e3 --- /dev/null +++ b/c/inline/inline.c @@ -0,0 +1,25 @@ +#include <stdint.h> +#include <stdbool.h> +#include "rvcontroller-ecalls.h" + +volatile char thischar; + +volatile uint32_t nonblocking_read() { + volatile uint32_t ret; + asm( + "li a7,132 \n\ + ecall \n\ + mv %0,a0 \n" + : "=r" (ret) + : + : "a0" + ); + return ret; +} + +void main() { + while (true) { + thischar = nonblocking_read(); + //printint(thischar); + } +} diff --git a/c/inline/rvcontroller.ld b/c/inline/rvcontroller.ld new file mode 100644 index 0000000..985892b --- /dev/null +++ b/c/inline/rvcontroller.ld @@ -0,0 +1,45 @@ +/* Thanks https://github.com/darklife/darkriscv */ + __heap_size = 0x200; /* required amount of heap */ + __stack_size = 0x800; /* required amount of stack */ + ENTRY(_start); + MEMORY + { + RAM (rwx) : ORIGIN = 0x00000000, LENGTH = 0x10000 + } + SECTIONS + { + .text : + { + *(.text.startup) + *(.text) + *(.text) + *(.rodata*) + } > RAM + .data : + { + *(.sbss) + *(.data) + *(.bss) + *(.rela*) + *(COMMON) + } > RAM + + .heap : + { + . = ALIGN(4); + PROVIDE ( end = . ); + _sheap = .; + . = . + __heap_size; + . = ALIGN(4); + _eheap = .; + } >RAM + + .stack : + { + . = ALIGN(4); + _estack = .; + . = . + __stack_size; + . = ALIGN(4); + _sstack = .; + } >RAM + } |
