summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pico1541.c5
-rw-r--r--src/splash.c20
-rw-r--r--src/splash.h10
-rw-r--r--src/ssd1306.c22
-rw-r--r--src/ssd1306.h5
5 files changed, 52 insertions, 10 deletions
diff --git a/src/pico1541.c b/src/pico1541.c
index a5bbbf5..170491a 100644
--- a/src/pico1541.c
+++ b/src/pico1541.c
@@ -3,6 +3,7 @@
#include <pico/error.h>
#include <pico/time.h>
+#include "splash.h"
#include "ssd1306.h"
int main() {
@@ -21,9 +22,7 @@ int main() {
ssd_init(&display, i2c0, 0x3C);
ssd_power_on(&display);
- ssd_push(&display, SSD1306_CTRL_DATA);
- ssd_push_str(&display, "HEWWO OwO");
- ssd_send(&display);
+ splash_draw(&display);
return 0;
}
diff --git a/src/splash.c b/src/splash.c
new file mode 100644
index 0000000..828559a
--- /dev/null
+++ b/src/splash.c
@@ -0,0 +1,20 @@
+#include "splash.h"
+
+#include <pico/error.h>
+
+const uint8_t splash_chars[64] = {
+ 0x20, 0xdf, 0xe9, 0x20, 0xa0, 0xa0, 0xa0, 0xa0, 0x20, 0xdf, 0xe9, 0x20, 0xa0, 0xa0, 0xa0, 0xa0,
+ 0x55, 0x55, 0x49, 0x49, 0xa0, 0xd5, 0xc9, 0xa0, 0x55, 0x55, 0x49, 0x49, 0xa0, 0xd5, 0xc9, 0xa0,
+ 0x4a, 0x57, 0x57, 0x4b, 0xa0, 0xca, 0xcb, 0xfe, 0x4a, 0x57, 0x57, 0x4b, 0xa0, 0xca, 0xcb, 0xfe,
+ 0x20, 0x4a, 0x4b, 0x20, 0xa0, 0xea, 0xf4, 0xa0, 0x20, 0x4a, 0x4b, 0x20, 0xa0, 0xea, 0xf4, 0xa0,
+};
+
+int splash_draw(ssd1306_t *display) {
+ for (int i = 0; i < 64; i++) {
+ int ret = ssd_putscr(display, splash_chars[i], false);
+ if (ret < 0) {
+ return ret;
+ }
+ }
+ return PICO_OK;
+}
diff --git a/src/splash.h b/src/splash.h
new file mode 100644
index 0000000..b1039e5
--- /dev/null
+++ b/src/splash.h
@@ -0,0 +1,10 @@
+#ifndef PICO1541_SPLASH_H
+#define PICO1541_SPLASH_H
+
+#include <stdint.h>
+
+#include "ssd1306.h"
+
+int splash_draw(ssd1306_t *display);
+
+#endif
diff --git a/src/ssd1306.c b/src/ssd1306.c
index e1c00ff..04991a2 100644
--- a/src/ssd1306.c
+++ b/src/ssd1306.c
@@ -77,22 +77,34 @@ int ssd_power_on(ssd1306_t *display) {
return ssd_send(display);
}
-int ssd_push_char(ssd1306_t *display, const char c) {
- uint8_t scr = ascii_to_screen[c];
+int ssd_putscr(ssd1306_t *display, const uint8_t c, bool shift) {
+ ssd_push(display, SSD1306_CTRL_DATA);
for (int i = 0; i < 8; i++) {
- int ret = ssd_push(display, c64_chars[scr + 256][i]);
+ int b;
+ if (shift) {
+ b = c64_chars[c + 256][i];
+ } else {
+ b = c64_chars[c][i];
+ }
+
+ int ret = ssd_push(display, b);
if (ret < 0) {
return ret;
}
}
- return PICO_OK;
+ return ssd_send(display);
+}
+
+int ssd_putchar(ssd1306_t *display, const char c) {
+ uint8_t scr = ascii_to_screen[c];
+ return ssd_putscr(display, scr, true);
}
int ssd_push_str(ssd1306_t *display, const char *str) {
for (int i = 0; str[i]; i++) {
- int ret = ssd_push_char(display, str[i]);
+ int ret = ssd_putchar(display, str[i]);
if (ret < 0) {
return ret;
}
diff --git a/src/ssd1306.h b/src/ssd1306.h
index 9c72d04..581b683 100644
--- a/src/ssd1306.h
+++ b/src/ssd1306.h
@@ -135,7 +135,8 @@ int ssd_send(ssd1306_t *display);
int ssd_power_on(ssd1306_t *display);
-int ssd_push_char(ssd1306_t *display, const char c);
-int ssd_push_str(ssd1306_t *display, const char *str);
+int ssd_putscr(ssd1306_t *display, const uint8_t c, bool shift);
+int ssd_putchar(ssd1306_t *display, const char c);
+int ssd_putstr(ssd1306_t *display, const char *str);
#endif