summaryrefslogtreecommitdiffstats
path: root/firmware/print.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/print.c')
-rw-r--r--firmware/print.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/firmware/print.c b/firmware/print.c
new file mode 100644
index 0000000..accce26
--- /dev/null
+++ b/firmware/print.c
@@ -0,0 +1,41 @@
+// This is free and unencumbered software released into the public domain.
+//
+// Anyone is free to copy, modify, publish, use, compile, sell, or
+// distribute this software, either in source code form or as a compiled
+// binary, for any purpose, commercial or non-commercial, and by any
+// means.
+
+#include "firmware.h"
+
+#define OUTPORT 0x10000000
+
+void print_chr(char ch)
+{
+ *((volatile uint32_t*)OUTPORT) = ch;
+}
+
+void print_str(const char *p)
+{
+ while (*p != 0)
+ *((volatile uint32_t*)OUTPORT) = *(p++);
+}
+
+void print_dec(unsigned int val)
+{
+ char buffer[10];
+ char *p = buffer;
+ while (val || p == buffer) {
+ *(p++) = val % 10;
+ val = val / 10;
+ }
+ while (p != buffer) {
+ *((volatile uint32_t*)OUTPORT) = '0' + *(--p);
+ }
+}
+
+void print_hex(unsigned int val, int digits)
+{
+ for (int i = (4*digits)-4; i >= 0; i -= 4)
+ *((volatile uint32_t*)OUTPORT) = "0123456789ABCDEF"[(val >> i) % 16];
+}
+