summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcheapie <cheapiephp@gmail.com>2026-05-29 13:51:52 -0500
committercheapie <cheapiephp@gmail.com>2026-05-29 13:51:52 -0500
commit6319f57bd1f622aa61e73e172dec25150203ac84 (patch)
treebdd007a7191a501ebce7c6883061c0e6fec11d36
parent8ae725e76f5032ea216673a87a43b5e3ba8358d6 (diff)
downloadrvcontroller-6319f57bd1f622aa61e73e172dec25150203ac84.tar
rvcontroller-6319f57bd1f622aa61e73e172dec25150203ac84.tar.gz
rvcontroller-6319f57bd1f622aa61e73e172dec25150203ac84.tar.bz2
rvcontroller-6319f57bd1f622aa61e73e172dec25150203ac84.tar.xz
rvcontroller-6319f57bd1f622aa61e73e172dec25150203ac84.zip
Add random-color display example
-rw-r--r--c/randomcolor/Makefile34
-rw-r--r--c/randomcolor/randomcolor.c34
-rwxr-xr-xc/randomcolor/randomcolor.elfbin0 -> 7436 bytes
-rw-r--r--c/randomcolor/randomcolor.hex74
-rw-r--r--c/randomcolor/randomcolor.obin0 -> 4456 bytes
-rw-r--r--c/randomcolor/rvcontroller.ld45
6 files changed, 187 insertions, 0 deletions
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
--- /dev/null
+++ b/c/randomcolor/randomcolor.elf
Binary files 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
--- /dev/null
+++ b/c/randomcolor/randomcolor.o
Binary files 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
+ }