From 6319f57bd1f622aa61e73e172dec25150203ac84 Mon Sep 17 00:00:00 2001 From: cheapie Date: Fri, 29 May 2026 13:51:52 -0500 Subject: Add random-color display example --- c/randomcolor/Makefile | 34 +++++++++++++++++++ c/randomcolor/randomcolor.c | 34 +++++++++++++++++++ c/randomcolor/randomcolor.elf | Bin 0 -> 7436 bytes c/randomcolor/randomcolor.hex | 74 ++++++++++++++++++++++++++++++++++++++++++ c/randomcolor/randomcolor.o | Bin 0 -> 4456 bytes c/randomcolor/rvcontroller.ld | 45 +++++++++++++++++++++++++ 6 files changed, 187 insertions(+) create mode 100644 c/randomcolor/Makefile create mode 100644 c/randomcolor/randomcolor.c create mode 100755 c/randomcolor/randomcolor.elf create mode 100644 c/randomcolor/randomcolor.hex create mode 100644 c/randomcolor/randomcolor.o create mode 100644 c/randomcolor/rvcontroller.ld (limited to 'c') diff --git a/c/randomcolor/Makefile b/c/randomcolor/Makefile new file mode 100644 index 0000000..fbf70fd --- /dev/null +++ b/c/randomcolor/Makefile @@ -0,0 +1,34 @@ +CC ?= clang +CFLAGS_MARCH ?= -march=rv32imacbzicntr_zicond_zicsr_zifencei_zihintpause_zilsd_zclsd_zabha_zacas_zbkb_zbkx_zcb_zcmp_zcmt +CFLAGS_OPT ?= -O3 +CFLAGS ?= ${CFLAGS_MARCH} ${CFLAGS_OPT} + +# Big-endian just for the sake of being weird + +ifeq (${CC}, clang) + CC := ${CC} -target riscv32be-none-elf +endif + +.PHONY: all dump load clean + +all: randomcolor.hex + +randomcolor.o: randomcolor.c + ${CC} -I../rvcontroller-libraries ${CFLAGS} -ffreestanding -c -o randomcolor.o randomcolor.c + + +randomcolor.elf: ../rvcontroller-libraries/rvcontroller-init-be.o ../rvcontroller-libraries/rvcontroller-ecalls-be.o randomcolor.o + ${CC} -T rvcontroller.ld -nostdlib -nostartfiles -Xlinker --no-warn-rwx-segments -o randomcolor.elf ../rvcontroller-libraries/rvcontroller-init-be.o ../rvcontroller-libraries/rvcontroller-ecalls-be.o randomcolor.o + +dump: randomcolor.elf + riscv32be-none-elf-objdump -d randomcolor.elf + +randomcolor.hex: randomcolor.elf + riscv32be-none-elf-objcopy -O ihex randomcolor.elf randomcolor.hex + +load: randomcolor.hex + bash -c "wl-copy < randomcolor.hex" + +clean: + rm -f randomcolor.bin randomcolor.elf randomcolor.o + diff --git a/c/randomcolor/randomcolor.c b/c/randomcolor/randomcolor.c new file mode 100644 index 0000000..9afe79b --- /dev/null +++ b/c/randomcolor/randomcolor.c @@ -0,0 +1,34 @@ +/* Random Color Display for RVController + * A product of Advanced Mesecons Devices, a Cheapie Systems company + * This is free and unencumbered software released into the public domain. + * See http://unlicense.org/ for more information */ + +#include "rvcontroller-ecalls.h" + +char color[] = "123456"; +char channel[] = "A1"; +char chars[] = "0123456789ABCDEF"; + +void randomize() { + for (int i=0;i<=5;i++) { + color[i] = chars[randomint(0,15)]; + } +} + +void main(void) { + for (int y=0;y<=5;y++) { + channel[1] = '1' + y; + for (int x=0;x<=19;x++) { + channel[0] = 'A' + x; + randomize(); + digiline_send(channel,color); + } + } + + for (;;) { + channel[0] = randomint('A','T'); + channel[1] = randomint('1','6'); + randomize(); + digiline_send(channel,color); + } +} diff --git a/c/randomcolor/randomcolor.elf b/c/randomcolor/randomcolor.elf new file mode 100755 index 0000000..c90cd0f Binary files /dev/null and b/c/randomcolor/randomcolor.elf differ diff --git a/c/randomcolor/randomcolor.hex b/c/randomcolor/randomcolor.hex new file mode 100644 index 0000000..433d9e5 --- /dev/null +++ b/c/randomcolor/randomcolor.hex @@ -0,0 +1,74 @@ +:100000009302000273A0023137010100FD28A948C4 +:100010007300000082808548730000008280914850 +:10002000730000008280AD48730000008280930856 +:1000300010087300000082809308500873000000CD +:10004000828093087008730000008280732510C0BE +:100050008280732500C082809308600873000000CE +:1000600082800589F322008093920248B3E2A200C5 +:10007000739002808280954873000000828093080C +:100080000008730000008280A14873000000828095 +:1000900093083008730000008280930840087300C2 +:1000A0000000828052B8BD450145D13F130440464F +:1000B00022950345A5006888BD450145C9372295AD +:1000C0000345A5002302A400BD4501454D3F2295EF +:1000D0000345A500A302A400BD4501454D37229567 +:1000E0000345A5002303A400BD450145493F2295D2 +:1000F0000345A500A303A400BD450145493722954A +:100100000345A5002304A40052BE46B822E44AE0F9 +:100110000149130440461305100348889304340032 +:10012000D149130519040888BD450145893F229529 +:100130000345A5006888BD450145913722950345D3 +:10014000A5002302A400BD450145153F22950345A6 +:10015000A500A302A400BD4501451537229503451E +:10016000A5002303A400BD450145113F2295034589 +:10017000A500A303A400BD45014511372295034501 +:10018000A5002304A40066AC5D350509E31B39F91D +:100190000149130520034888D1491305190408882B +:1001A000BD450145E93D22950345A5006888BD454B +:1001B0000145F13522950345A5002302A400BD4564 +:1001C0000145753D22950345A500A302A400BD4548 +:1001D0000145753522950345A5002303A400BD45BF +:1001E0000145713D22950345A500A303A400BD452B +:1001F0000145713522950345A5002304A40066AC92 +:100200003D350509E31B39F90149130530034888D9 +:10021000D149130519040888BD4501458D3522953E +:100220000345A5006888BD450145913D22950345DC +:10023000A5002302A400BD45014591352295034543 +:10024000A500A302A400BD450145153D2295034527 +:10025000A5002303A400BD4501451535229503459E +:10026000A500A303A400BD450145113D229503450A +:10027000A5002304A40066AC5D3B0509E31B39F926 +:100280000149130540034888D1491305190408881A +:10029000BD450145ED3322950345A5006888BD4560 +:1002A0000145F13B22950345A5002302A400BD456D +:1002B0000145F13322950345A500A302A400BD45E5 +:1002C0000145753B22950345A5002303A400BD45C8 +:1002D0000145753322950345A500A303A400BD4540 +:1002E0000145713B22950345A5002304A40066AC9B +:1002F0003D3B0509E31B39F90149130550034888C3 +:10030000D149130519040888BD4501458D3B229547 +:100310000345A5006888BD450145953322950345F1 +:10032000A5002302A400BD450145913B229503454C +:10033000A500A302A400BD450145913322950345C4 +:10034000A5002303A400BD450145153B22950345A7 +:10035000A500A303A400BD4501451533229503451F +:10036000A5002304A40066ACD9310509E31B39F9C3 +:100370000149130560034888D14913051904088809 +:10038000BD450145ED3922950345A5006888BD4569 +:100390000145F53122950345A5002302A400BD4582 +:1003A0000145F13922950345A500A302A400BD45EE +:1003B0000145F13122950345A5002303A400BD4565 +:1003C0000145753922950345A500A303A400BD4549 +:1003D0000145753122950345A5002304A40066ACB0 +:1003E000B9310509E31B39F91305100493054005DC +:1003F0007931088813051003930560034931488853 +:10040000BD450145AD3922950345A5006888BD4528 +:100410000145B53122950345A5002302A400BD4541 +:100420000145B13922950345A500A302A400BD45AD +:100430000145B13122950345A5002303A400BD4524 +:100440000145353922950345A500A303A400BD4508 +:100450000145353122950345A5002304A40066AC6F +:04046000F93659B759 +:1004640041310031323334353600303132333435B2 +:0B04740036373839414243444546000A +:00000001FF diff --git a/c/randomcolor/randomcolor.o b/c/randomcolor/randomcolor.o new file mode 100644 index 0000000..5851983 Binary files /dev/null and b/c/randomcolor/randomcolor.o differ diff --git a/c/randomcolor/rvcontroller.ld b/c/randomcolor/rvcontroller.ld new file mode 100644 index 0000000..985892b --- /dev/null +++ b/c/randomcolor/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 + } -- cgit v1.2.3