commit adcf6da8eb531c5240842b8ebfc3a655ee3deac4 Author: Tom Charnock Date: Fri Dec 27 16:00:43 2024 +0100 Initial commit, screen code mostly working, a couple of symbols missing from the font, keypresses work but is not programmed yet diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/adafruit-circuitpython-waveshare_rp2040_zero-en_GB-9.2.1.uf2 b/adafruit-circuitpython-waveshare_rp2040_zero-en_GB-9.2.1.uf2 new file mode 100644 index 0000000..cee0220 Binary files /dev/null and b/adafruit-circuitpython-waveshare_rp2040_zero-en_GB-9.2.1.uf2 differ diff --git a/board_layout/0.svg b/board_layout/0.svg new file mode 100644 index 0000000..964c1a8 --- /dev/null +++ b/board_layout/0.svg @@ -0,0 +1,3434 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/board_layout/1x2.svg b/board_layout/1x2.svg new file mode 100644 index 0000000..041b2f6 --- /dev/null +++ b/board_layout/1x2.svg @@ -0,0 +1,3488 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/board_layout/2.svg b/board_layout/2.svg new file mode 100644 index 0000000..3f6810d --- /dev/null +++ b/board_layout/2.svg @@ -0,0 +1,3632 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/board_layout/3.svg b/board_layout/3.svg new file mode 100644 index 0000000..45e1b2e --- /dev/null +++ b/board_layout/3.svg @@ -0,0 +1,3432 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/board_layout/4.svg b/board_layout/4.svg new file mode 100644 index 0000000..295b972 --- /dev/null +++ b/board_layout/4.svg @@ -0,0 +1,3347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/characters.py b/characters.py new file mode 100644 index 0000000..862d3f4 --- /dev/null +++ b/characters.py @@ -0,0 +1,99 @@ +characters = [ + [ + [ + [ + [ + [None, None, None, None], #00000 + ["\u2423", "\u002e", "\u003c", "\u0031"], #00001 [SPACE, FULLSTOP, LESS THAN, 1] + ], + [ + ["\u21b9", "\u002c", None, "\u0032"], #00010 [TAB, COMMA, None, 2] + ["\u0065", "\u0045", "\u003d", "\u0035"], #00011 [e, E, EQUALS, 5] + ], + ], + [ + [ + ["\u232b", "\u003a", None, "\u0033"], #00100 [BACKSPACE, :, None, 3] + ["\u0061", "\u0041", "\u002b", "\u0036"], #00101 [a, A, PLUS, 6] + ], + [ + ["\u0072", "\u0052", "\u002f", "\u1f50e"], #00110 [r, R, SLASH, CTRL+F] + ["\u0075", "\u0055", "\u0027", "\u0038"], #00111 [u, U, APOSTROPHE, 8] + ], + ], + ], + [ + [ + [ + ["\u238b", "\u003b", None, "\u0034"], #01000 [ESCAPE, SEMICOLON, None, 4] + ["\u0069", "\u0049", "\u002a", "\u0037"], #01001 [i, I, ASTERISK, 7] + ], + [ + ["\u0063", "\u0043", "\u005c", "\u261d"], #01010 [c, C, BACKSLASH, CTRL+A] + ["\u0078", "\u0058", "\u0022", "\u0039"], #01011 [x, X, DOUBLE QUOTES, 9] + ], + ], + [ + [ + ["\u006c", "\u004c", "\u007e", "\u2190\u2318"], #01100 [l, L, TILDE, SUPER LEFT] + ["\u007a", "\u005a", "\u003e", "\u2192\u2318"], #01101 [z, Z, GREATER THAN, SUPER RIGHT] + ], + [ + ["\u0064", "\u0044", "\u0060", "\u29c8"], #01110 [d, D, TICK, PASTE] + ["\u0068", "\u0048", "\u0040", "\u0030"], #01111 [h, H, AT, 0] + ], + ], + ], + ], + [ + [ + [ + [ + ["\u23ce", "\u21e7\u23ce", "\u002d", "\u2399"], #10000 [RETURN, SHIFT RETURN, MINUS, PRINT SCREEN] + ["\u006f", "\u004f", "\u0029", "\u2193"], #10001 [o, O, CLOSE BRACKET, DOWN] + ], + [ + ["\u006d", "\u004d", "\u0028", "\u2192"], #10010 [m, M, OPEN BRACKET, RIGHT] + ["\u0070", "\u0050", "\u005f", None], #10011 [p, P, UNDERSCORE, None] + ], + ], + [ + [ + ["\u0066", "\u0046", "\u0023", "\u2191"], #10100 [f, F, HASH, UP] + ["\u0077", "\u0057", "\u007c", None], #10101 [w, W, PIPE, None] + ], + [ + ["\u006a", "\u004a", "\u0025", None], #10110 [j, J, PERCENT, None] + ["\u0071", "\u0051", "\u003f", None], #10111 [q, Q, QUESTION MARK, None] + ], + ], + ], + [ + [ + [ + ["\u0079", "\u0059", "\u0024", "\u2318"], #11000 [y, Y, DOLLAR, LEFT] + ["\u0062", "\u0042", "\u007d", None], #11001 [b, B, CLOSE CURLY BRACKET, None] + ], + [ + ["\u006b", "\u004b", "\u007b", None], #11010 [k, K, OPEN CURLY BRACKET, None] + ["\u0067", "\u0047", "\u0021", None], #11011 [g, G, EXCLAMATION MARK, None] + ], + ], + [ + [ + ["\u0073", "\u0053", "\u005e", "\u21e4"], #11100 [s, S, CIRCUMFLEX, HOME] + ["\u0076", "\u0056", "\u005d", "\u21e5"], #11101 [v, V, CLOSE SQUARE BRACKET, END] + ], + [ + ["\u006e", "\u004e", "\u005b", "\u29c9"], #11110 [n, N, OPEN SQUARE BRACKET, CTRL+C] + ["\u0074", "\u0054", "\u0026", "▢"], #11111 [t, T, AMPERSAND, SUPER] + ], + ], + ], + ], +] + +def get_character_set(): + return sorted(list(set(sum([list(a) for a in sum(sum(sum(sum(sum(characters, []), []), []), []), []) if a is not None], [])))) + +missing = ["-", "_"] diff --git a/code.py b/code.py new file mode 100644 index 0000000..5f828ca --- /dev/null +++ b/code.py @@ -0,0 +1,332 @@ +import time +import board +import math +import random +import busio +from digitalio import DigitalInOut, Direction, Pull +import displayio +from vectorio import Rectangle, Circle, Polygon +from adafruit_display_text import label +from adafruit_bitmap_font import bitmap_font +import gc9a01 +import usb_hid +from characters import characters +from adafruit_hid.keyboard import Keyboard +from adafruit_hid.keycode import Keycode + +kbd = Keyboard(usb_hid.devices) + + +font = bitmap_font.load_font("fonts/VictorMonoNerdFont-SemiBoldItalic-32.pcf") + +displayio.release_displays() + +mode_labels = [ + ["Letters", "Words", "Predictive"], + ["Lettres", "Mots", "Predictif"] +] +language_labels = ["English", "Francais"] +backlight_labels = ["Backlight", "Retroeclairage"] + +tft_clk = board.GP2 +tft_mosi= board.GP3 +tft_rst = board.GP4 +tft_dc = board.GP1 +tft_cs = board.GP0 + +tft_bl = DigitalInOut(board.GP5) +tft_bl.direction = Direction.OUTPUT +tft_bl.value = True + +key0 = DigitalInOut(board.GP6) +key0.pull = Pull.UP +key1 = DigitalInOut(board.GP7) +key1.pull = Pull.UP +key2 = DigitalInOut(board.GP8) +key2.pull = Pull.UP +key3 = DigitalInOut(board.GP9) +key3.pull = Pull.UP +key4 = DigitalInOut(board.GP10) +key4.pull = Pull.UP +key5 = DigitalInOut(board.GP11) +key5.pull = Pull.UP +key6 = DigitalInOut(board.GP12) +key6.pull = Pull.UP + +spi = busio.SPI(clock=tft_clk, MOSI=tft_mosi) + +display_bus = displayio.FourWire(spi, command=tft_dc, chip_select=tft_cs, reset=tft_rst) +display = gc9a01.GC9A01(display_bus, width=240, height=240) + +main_display = displayio.Group() +display.root_group = main_display + +label_position_radius = 90 + +top_text = label.Label( + font, + text=" "*10, + color=0xffffff, + anchor_point=(0.5, 0.5), + anchored_position=(0, 0) +) +top = displayio.Group(scale=1) +top.x, top.y = 120, 50 +top.append(top_text) +main_display.append(top) + +middle_text = label.Label( + font, + text=" "*8, + color=0xffffff, + anchor_point=(0.5, 0.5), + anchored_position=(0, 0) +) +middle = displayio.Group(scale=1) +middle.x, middle.y = 120, 110 +middle.append(middle_text) +main_display.append(middle) + +bottom_text = label.Label( + font, + text=" "*14, + color=0xffffff, + anchor_point=(0.5, 0.5), + anchored_position=(0, 0) +) +bottom = displayio.Group(scale=1) +bottom.x, bottom.y = 120, 170 +bottom.append(bottom_text) +main_display.append(bottom) + +key0_text = label.Label( + font, + text = " ", + color=0xffffff, + anchor_point=(0.5, 0.5), + anchored_position=(0, 0) +) +key0_colour = (219, 97, 71) +key0_palette = displayio.Palette(1) +key0_palette[0] = (0, 0, 0) +key0_display = displayio.Group(scale=1) +key0_angle = - 2. * math.pi / 3. +key0_display.x = int(120 + label_position_radius * math.sin(key0_angle)) +key0_display.y = int(120 - label_position_radius * math.cos(key0_angle)) +key0_display.append(key0_text) +main_display.append(Circle(pixel_shader=key0_palette, radius=16, x=key0_display.x, y=key0_display.y)) +main_display.append(key0_display) + +key1_text = label.Label( + font, + text = " ", + color=0xffffff, + anchor_point=(0.5, 0.5), + anchored_position=(0, 0) +) +key1_colour = (100, 150, 40) +key1_palette = displayio.Palette(1) +key1_palette[0] = (0, 0, 0) +key1_display = displayio.Group(scale=1) +key1_angle = - math.pi / 3. +key1_display.x = int(120 + label_position_radius * math.sin(key1_angle)) +key1_display.y = int(120 - label_position_radius * math.cos(key1_angle)) +key1_display.append(key1_text) +main_display.append(Circle(pixel_shader=key1_palette, radius=16, x=key1_display.x, y=key1_display.y)) +main_display.append(key1_display) + +key2_text = label.Label( + font, + text = " ", + color=0xffffff, + anchor_point=(0.5, 0.5), + anchored_position=(0, 0) +) +key2_colour = (40, 150, 100) +key2_palette = displayio.Palette(1) +key2_palette[0] = (0, 0, 0) +key2_display = displayio.Group(scale=1) +key2_angle = 0 +key2_display.x = int(120 + label_position_radius * math.sin(key2_angle)) +key2_display.y = int(120 - label_position_radius * math.cos(key2_angle)) +key2_display.append(key2_text) +main_display.append(Circle(pixel_shader=key2_palette, radius=16, x=key2_display.x, y=key2_display.y)) +main_display.append(key2_display) + +key3_text = label.Label( + font, + text = " ", + color=0xffffff, + anchor_point=(0.5, 0.5), + anchored_position=(0, 0) +) +key3_colour = (100, 40, 150) +key3_palette = displayio.Palette(1) +key3_palette[0] = (0, 0, 0) +key3_display = displayio.Group(scale=1) +key3_angle = math.pi / 3. +key3_display.x = int(120 + label_position_radius * math.sin(key3_angle)) +key3_display.y = int(120 - label_position_radius * math.cos(key3_angle)) +key3_display.append(key3_text) +main_display.append(Circle(pixel_shader=key3_palette, radius=16, x=key3_display.x, y=key3_display.y)) +main_display.append(key3_display) + +key4_text = label.Label( + font, + text = " ", + color=0xffffff, + anchor_point=(0.5, 0.5), + anchored_position=(0, 0) +) +key4_colour = (40, 40, 150) +key4_palette = displayio.Palette(1) +key4_palette[0] = (0, 0, 0) +key4_display = displayio.Group(scale=1) +key4_angle = 2. * math.pi / 3. +key4_display.x = int(120 + label_position_radius * math.sin(key4_angle)) +key4_display.y = int(120 - label_position_radius * math.cos(key4_angle)) +key4_display.append(key4_text) +main_display.append(Circle(pixel_shader=key4_palette, radius=16, x=key4_display.x, y=key4_display.y)) +main_display.append(key4_display) + +key5_colour = (0, 100, 30) +key5_palette = displayio.Palette(1) +key5_palette[0] = (0, 0, 0) +main_display.append(Circle(pixel_shader=key5_palette, radius=16, x=120-32, y=120)) + +key6_colour = (15, 100, 200) +key6_palette = displayio.Palette(1) +key6_palette[0] = (0, 0, 0) +main_display.append(Circle(pixel_shader=key6_palette, radius=16, x=120+32, y=120)) + +def swap_to_settings_display(): + key0_text.text = "" + key1_text.text = "" + key2_text.text = "" + key3_text.text = "" + key4_text.text = "" + +def settings_display(mode, language, location): + print(mode, language, location, mode_labels[language][mode]) + display.refresh() + top_text.text = mode_labels[language][mode] + top_text.color = 0x1c4d2d if location == 0 else 0xffffff + middle_text.text = language_labels[language] + middle_text.color = 0x1c4d2d if location == 1 else 0xffffff + bottom_text.text = backlight_labels[language] + bottom_text.color = 0x1c4d2d if location == 2 else 0xffffff + +def swap_to_character_display(): + top_text.text = "" + middle_text.text = "" + bottom_text.text = "" + +def edit_character(pin, character, key_text, key_palette, colour): + if pin is 0: + key_palette[0] = (0, 0, 0) + if character is None: + key_text.text = "" + else: + key_text.text = character + else: + key_text.text = "" + key_palette[0] = colour + +def character_display(pin0, pin1, pin2, pin3, pin4, selection): + display.refresh() + edit_character(pin0, characters[1][pin1][pin2][pin3][pin4][selection], key0_text, key0_palette, key0_colour) + edit_character(pin1, characters[pin0][1][pin2][pin3][pin4][selection], key1_text, key1_palette, key1_colour) + edit_character(pin2, characters[pin0][pin1][1][pin3][pin4][selection], key2_text, key2_palette, key2_colour) + edit_character(pin3, characters[pin0][pin1][pin2][1][pin4][selection], key3_text, key3_palette, key3_colour) + edit_character(pin4, characters[pin0][pin1][pin2][pin3][1][selection], key4_text, key4_palette, key4_colour) + +def mode_display(selection): + if selection is 0: + key5_palette[0] = (0, 0, 0) + key6_palette[0] = (0, 0, 0) + elif selection is 1: + key5_palette[0] = key5_colour + key6_palette[0] = (0, 0, 0) + elif selection is 2: + key5_palette[0] = (0, 0, 0) + key6_palette[0] = key6_colour + elif selection is 3: + key5_palette[0] = key5_colour + key6_palette[0] = key6_colour + +def pressed(key): + return not key.value + +def poll(): + return [pressed(key0), pressed(key1), pressed(key2), pressed(key3), pressed(key4), pressed(key5), pressed(key6)] + +def main(): + for selection in range(4): + mode_display(selection) + character_display(0, 0, 0, 0, 0, selection) + time.sleep(1) + character_display(0, 0, 0, 0, 1, selection) + time.sleep(1) + character_display(0, 0, 0, 1, 0, selection) + time.sleep(1) + character_display(0, 0, 1, 0, 0, selection) + time.sleep(1) + character_display(0, 1, 0, 0, 0, selection) + time.sleep(1) + character_display(1, 0, 0, 0, 0, selection) + time.sleep(1) + character_display(0, 0, 0, 1, 1, selection) + time.sleep(1) + character_display(0, 0, 1, 0, 1, selection) + time.sleep(1) + character_display(0, 1, 0, 0, 1, selection) + time.sleep(1) + character_display(1, 0, 0, 0, 1, selection) + time.sleep(1) + character_display(0, 0, 1, 1, 0, selection) + time.sleep(1) + character_display(0, 1, 0, 1, 0, selection) + time.sleep(1) + character_display(1, 0, 0, 1, 0, selection) + time.sleep(1) + character_display(0, 1, 1, 0, 0, selection) + time.sleep(1) + character_display(1, 0, 1, 0, 0, selection) + time.sleep(1) + character_display(1, 1, 0, 0, 0, selection) + time.sleep(1) + character_display(0, 0, 1, 1, 1, selection) + time.sleep(1) + character_display(0, 1, 0, 1, 1, selection) + time.sleep(1) + character_display(1, 0, 0, 1, 1, selection) + time.sleep(1) + character_display(0, 1, 1, 1, 0, selection) + time.sleep(1) + character_display(1, 0, 1, 1, 0, selection) + time.sleep(1) + character_display(1, 1, 1, 0, 0, selection) + time.sleep(1) + character_display(0, 1, 1, 1, 1, selection) + time.sleep(1) + character_display(1, 1, 1, 0, 1, selection) + time.sleep(1) + character_display(1, 1, 0, 1, 1, selection) + time.sleep(1) + character_display(1, 0, 1, 1, 1, selection) + time.sleep(1) + character_display(0, 1, 1, 1, 1, selection) + time.sleep(1) + character_display(1, 1, 1, 1, 1, selection) + time.sleep(1) + tft_bl.value = False + while True: + pass +# keypresses = poll() +# if any(keypresses): +# kbd.send(Keycode.A) +# time.sleep(1) + + + +main() diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..d31754c --- /dev/null +++ b/flake.lock @@ -0,0 +1,57 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 0, + "narHash": "sha256-Qn3nPMSopRQJgmvHzVqPcE3I03zJyl8cSbgnnltfFDY=", + "path": "/nix/store/avxvalb7xf8x4avmrbcvn1vr5yy46kxs-source", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "utils": "utils" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..400da0c --- /dev/null +++ b/flake.nix @@ -0,0 +1,18 @@ +{ + inputs = { + utils.url = "github:numtide/flake-utils"; + }; + outputs = { self, nixpkgs, utils }: utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in + { + devShell = pkgs.mkShell { + buildInputs = with pkgs; [ + circup + tio + ]; + }; + } + ); +} diff --git a/flash_nuke.uf2 b/flash_nuke.uf2 new file mode 100644 index 0000000..31291e6 Binary files /dev/null and b/flash_nuke.uf2 differ diff --git a/fonts/.envrc b/fonts/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/fonts/.envrc @@ -0,0 +1 @@ +use flake diff --git a/fonts/VictorMonoNerdFont-SemiBoldItalic-32.bdf b/fonts/VictorMonoNerdFont-SemiBoldItalic-32.bdf new file mode 100644 index 0000000..853eb36 --- /dev/null +++ b/fonts/VictorMonoNerdFont-SemiBoldItalic-32.bdf @@ -0,0 +1,3053 @@ +STARTFONT 2.1 +FONT -FontForge-VictorMono NF SemiBold-Demi-I-Normal--32-240-96-96-M-170-ISO10646-1 +SIZE 24 96 96 +FONTBOUNDINGBOX 28 35 -3 -6 +COMMENT "Generated by fontforge, http://fontforge.sourceforge.net" +COMMENT "Copyright (c) 2024 by Rune Bjrneras. All rights reserved." +STARTPROPERTIES 40 +FOUNDRY "FontForge" +FAMILY_NAME "VictorMono NF SemiBold" +WEIGHT_NAME "Demi" +SLANT "I" +SETWIDTH_NAME "Normal" +ADD_STYLE_NAME "" +PIXEL_SIZE 32 +POINT_SIZE 240 +RESOLUTION_X 96 +RESOLUTION_Y 96 +SPACING "M" +AVERAGE_WIDTH 170 +CHARSET_REGISTRY "ISO10646" +CHARSET_ENCODING "1" +FONTNAME_REGISTRY "" +CHARSET_COLLECTIONS "ASCII ISOLatin1Encoding ISO8859-2 ISO8859-5 ISO8859-7 ISO8859-9 ISO8859-4 Symbol ISO10646-1" +FONT_NAME "VictorMonoNF-SemiBoldItalic" +FACE_NAME "VictorMono NF SemiBold Italic" +COPYRIGHT "Copyright (c) 2024 by Rune Bjrneras. All rights reserved." +FONT_VERSION "1.560;Nerd Fonts 3.3.0" +FONT_ASCENT 25 +FONT_DESCENT 7 +UNDERLINE_POSITION -3 +UNDERLINE_THICKNESS 2 +X_HEIGHT 18 +CAP_HEIGHT 23 +RAW_ASCENT 800 +RAW_DESCENT 200 +ITALIC_ANGLE 4992 +RELATIVE_WEIGHT 60 +RELATIVE_SETWIDTH 50 +SUPERSCRIPT_X 2 +SUPERSCRIPT_Y 11 +SUPERSCRIPT_SIZE 19 +SUBSCRIPT_X 0 +SUBSCRIPT_Y 2 +SUBSCRIPT_SIZE 19 +FIGURE_WIDTH 17 +AVG_LOWERCASE_WIDTH 308 +AVG_UPPERCASE_WIDTH 308 +ENDPROPERTIES +CHARS 103 +STARTCHAR exclam +ENCODING 33 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 9 24 5 0 +BITMAP +0780 +0700 +0F00 +0F00 +0E00 +0E00 +0E00 +0E00 +1E00 +1C00 +1C00 +1C00 +1C00 +3800 +3800 +3800 +0000 +0000 +0000 +7000 +F800 +F800 +F000 +F000 +ENDCHAR +STARTCHAR quotedbl +ENCODING 34 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 12 11 5 13 +BITMAP +78F0 +78F0 +70F0 +70E0 +70E0 +70E0 +F1E0 +E1C0 +E1C0 +E1C0 +E1C0 +ENDCHAR +STARTCHAR numbersign +ENCODING 35 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 19 24 0 0 +BITMAP +00E1C0 +00E1C0 +01C1C0 +01C380 +01C380 +038380 +3FFFE0 +3FFFE0 +3FFFE0 +070E00 +070E00 +0E0E00 +0E1C00 +0E1C00 +1C1C00 +FFFF80 +FFFF00 +FFFF00 +387000 +387000 +707000 +70E000 +70E000 +E0E000 +ENDCHAR +STARTCHAR dollar +ENCODING 36 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 30 0 -2 +BITMAP +001C00 +001C00 +001C00 +003800 +01FF00 +03FF80 +07FFC0 +0F39C0 +0E7180 +0E7100 +0E7000 +0C7000 +0E7000 +0FE000 +07E000 +03F800 +00FC00 +01DE00 +01CF00 +01C700 +01C700 +01CE00 +238E00 +638E00 +F39C00 +7FFC00 +7FF800 +1FE000 +070000 +070000 +ENDCHAR +STARTCHAR percent +ENCODING 37 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 22 24 -2 0 +BITMAP +03F000 +07F800 +07FC04 +0E1C38 +0E1870 +0E38E0 +0FF9E0 +0FF3C0 +07E780 +000F00 +001E00 +003C00 +007800 +00F000 +01EFC0 +03FFE0 +07BFE0 +0F78E0 +1E70E0 +3C70E0 +7871C0 +807FC0 +007F80 +003F00 +ENDCHAR +STARTCHAR ampersand +ENCODING 38 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 19 24 -1 0 +BITMAP +01F000 +03F800 +07FC00 +0F1C00 +0E1C00 +0E1800 +0E3800 +0E7800 +0EF000 +0FE000 +0FDFE0 +0F9FC0 +1F3FC0 +1F8E00 +3B8E00 +71CE00 +71FC00 +E0FC00 +E0F800 +E07800 +E0FC00 +FFFC00 +7FDE00 +3F0F00 +ENDCHAR +STARTCHAR quotesingle +ENCODING 39 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 6 11 8 13 +BITMAP +3C +38 +38 +78 +78 +70 +70 +70 +70 +E0 +E0 +ENDCHAR +STARTCHAR parenleft +ENCODING 40 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 13 33 4 -4 +BITMAP +0018 +0078 +00F8 +01E0 +0380 +0700 +0F00 +0E00 +1C00 +1C00 +3800 +3800 +3800 +7000 +7000 +7000 +7000 +6000 +E000 +E000 +E000 +E000 +E000 +E000 +E000 +E000 +E000 +7000 +7000 +7800 +3E00 +1E00 +0E00 +ENDCHAR +STARTCHAR parenright +ENCODING 41 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 14 33 1 -4 +BITMAP +0180 +01C0 +03E0 +00F0 +0078 +0038 +0038 +0038 +0018 +001C +001C +001C +0018 +0038 +0038 +0038 +0038 +0038 +0038 +0070 +0070 +0070 +00E0 +00E0 +01C0 +01C0 +0380 +0780 +0F00 +1E00 +7C00 +F800 +E000 +ENDCHAR +STARTCHAR asterisk +ENCODING 42 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 18 1 3 +BITMAP +007000 +00E000 +00E000 +00E000 +30E100 +38E780 +7FDF00 +1FFC00 +0FF800 +07E000 +1FF800 +3FFC00 +FBBF00 +E38E00 +438400 +030000 +070000 +070000 +ENDCHAR +STARTCHAR plus +ENCODING 43 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 17 1 4 +BITMAP +006000 +00E000 +00E000 +00E000 +00C000 +00C000 +01C000 +FFFF80 +FFFF80 +FFFF00 +018000 +038000 +038000 +038000 +030000 +030000 +070000 +ENDCHAR +STARTCHAR comma +ENCODING 44 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 8 10 2 -6 +BITMAP +0E +1F +1F +1E +1E +0E +1C +38 +70 +E0 +ENDCHAR +STARTCHAR hyphen +ENCODING 45 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 13 3 3 11 +BITMAP +7FF8 +FFF0 +FFF0 +ENDCHAR +STARTCHAR period +ENCODING 46 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 5 5 5 0 +BITMAP +70 +F8 +F8 +F0 +F0 +ENDCHAR +STARTCHAR slash +ENCODING 47 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 22 34 -2 -5 +BITMAP +00001C +00001C +000038 +000070 +000070 +0000E0 +0000E0 +0001C0 +0003C0 +000380 +000700 +000700 +000E00 +000E00 +001C00 +003C00 +003800 +007000 +007000 +00E000 +00E000 +01C000 +03C000 +038000 +070000 +070000 +0E0000 +0E0000 +1C0000 +3C0000 +380000 +700000 +700000 +E00000 +ENDCHAR +STARTCHAR zero +ENCODING 48 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 24 1 0 +BITMAP +00F8 +01FC +07FE +070E +0E07 +1E07 +1C07 +3807 +3807 +7007 +71C7 +73C7 +73C7 +61CE +E00E +E00E +E01C +E01C +7038 +7078 +78F0 +3FE0 +3FC0 +0F00 +ENDCHAR +STARTCHAR one +ENCODING 49 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 12 24 1 0 +BITMAP +0070 +0070 +00F0 +00F0 +03E0 +1FE0 +1FE0 +1CE0 +00C0 +01C0 +01C0 +01C0 +01C0 +0180 +0380 +0380 +0380 +0380 +0700 +0700 +0700 +7FF0 +7FF0 +FFF0 +ENDCHAR +STARTCHAR two +ENCODING 50 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 19 24 -1 0 +BITMAP +00FF80 +01FFC0 +03FFE0 +0780E0 +0700E0 +0E00E0 +0E00E0 +0000E0 +0001C0 +0003C0 +000780 +000F00 +001E00 +007C00 +00F800 +03E000 +07C000 +0F0000 +1E0000 +380000 +700000 +7FFF00 +7FFF00 +FFFE00 +ENDCHAR +STARTCHAR three +ENCODING 51 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 1 0 +BITMAP +03FE00 +07FF00 +0FFF80 +1E0380 +1C0380 +1C0380 +200300 +000700 +000F00 +03FE00 +03FC00 +03FC00 +001C00 +000E00 +000E00 +000C00 +001C00 +E01C00 +E01C00 +E03C00 +E07800 +FFF800 +7FF000 +3FC000 +ENDCHAR +STARTCHAR four +ENCODING 52 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 0 0 +BITMAP +000380 +000780 +000F80 +000F00 +001F00 +003F00 +007F00 +00F700 +01EE00 +03CE00 +078E00 +0F0E00 +0E0E00 +1C1C00 +381C00 +7FFF00 +7FFF00 +FFFF00 +003800 +003800 +003800 +003800 +003000 +007000 +ENDCHAR +STARTCHAR five +ENCODING 53 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 24 1 0 +BITMAP +0FFFC0 +0FFF80 +1FFF80 +1C0000 +1C0000 +1C0000 +1C0000 +380000 +3BF800 +3FFC00 +3FFE00 +3C0E00 +700E00 +000600 +000E00 +000E00 +000E00 +E00E00 +E01C00 +C01C00 +E03C00 +FFF800 +FFF000 +3FC000 +ENDCHAR +STARTCHAR six +ENCODING 54 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 1 0 +BITMAP +01FE00 +07FF00 +0FFF80 +1E0380 +1C0380 +180180 +380000 +380000 +3BF000 +3FFC00 +7FFE00 +7C1E00 +700E00 +700E00 +E00E00 +E00E00 +E00E00 +E01C00 +E01C00 +E03C00 +E07800 +FFF800 +7FF000 +3FC000 +ENDCHAR +STARTCHAR seven +ENCODING 55 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 2 0 +BITMAP +3FFF80 +3FFF80 +3FFF80 +000700 +000E00 +001E00 +003C00 +003800 +007000 +00E000 +01E000 +01C000 +038000 +078000 +070000 +0E0000 +1E0000 +1C0000 +380000 +380000 +700000 +700000 +E00000 +200000 +ENDCHAR +STARTCHAR eight +ENCODING 56 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 24 0 0 +BITMAP +00FE00 +03FF80 +07FF80 +0F03C0 +0E01C0 +0E0180 +0C0380 +1C0380 +1C0780 +0FFF00 +0FFE00 +1FFE00 +3C0F00 +380700 +700700 +700700 +700700 +600700 +E00E00 +E00E00 +701C00 +7FFC00 +7FF800 +1FE000 +ENDCHAR +STARTCHAR nine +ENCODING 57 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 24 0 0 +BITMAP +00FE00 +03FF80 +07FFC0 +0F03C0 +0E01C0 +1C01C0 +1C01C0 +1C01C0 +1C0380 +180380 +180780 +1C0F80 +1FFF80 +1FFF00 +07F700 +000700 +000700 +000E00 +700E00 +E01E00 +703C00 +7FFC00 +7FF800 +1FE000 +ENDCHAR +STARTCHAR colon +ENCODING 58 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 8 19 5 0 +BITMAP +0E +1F +1F +1E +1E +00 +00 +00 +00 +00 +00 +00 +00 +00 +70 +F8 +F8 +F0 +F0 +ENDCHAR +STARTCHAR semicolon +ENCODING 59 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 11 25 2 -6 +BITMAP +01C0 +03E0 +03E0 +03C0 +03C0 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0000 +0E00 +1F00 +1F00 +1E00 +1E00 +0E00 +1C00 +3800 +7000 +E000 +ENDCHAR +STARTCHAR less +ENCODING 60 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 23 2 0 +BITMAP +000200 +000700 +000F80 +003E00 +007800 +00F000 +03E000 +078000 +0F0000 +3E0000 +780000 +F00000 +780000 +3C0000 +1E0000 +0F0000 +078000 +03C000 +01E000 +00F000 +00F800 +007000 +002000 +ENDCHAR +STARTCHAR equal +ENCODING 61 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 19 10 0 7 +BITMAP +3FFFE0 +3FFFC0 +7FFFC0 +000000 +000000 +000000 +000000 +FFFF80 +FFFF80 +FFFF80 +ENDCHAR +STARTCHAR greater +ENCODING 62 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 23 0 0 +BITMAP +020000 +060000 +0F0000 +078000 +03C000 +01E000 +00F000 +007800 +003C00 +001E00 +000F00 +000F80 +001E00 +003C00 +00F000 +01E000 +07C000 +0F0000 +1E0000 +7C0000 +F00000 +600000 +400000 +ENDCHAR +STARTCHAR question +ENCODING 63 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 15 24 3 0 +BITMAP +0FF8 +1FFC +3FFE +780E +700E +E00E +E00E +000E +001C +001C +0078 +00F8 +03E0 +07C0 +0700 +0E00 +0E00 +0000 +0000 +1C00 +3E00 +3E00 +3C00 +3C00 +ENDCHAR +STARTCHAR at +ENCODING 64 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 19 24 0 0 +BITMAP +00FF00 +07FF80 +0FFFC0 +0F01E0 +1EF8E0 +3DFCE0 +39FCE0 +3B9CE0 +739CE0 +731CC0 +7319C0 +7719C0 +E739C0 +E739C0 +E63B80 +E67380 +E7FF80 +E7FF00 +E3DE00 +E00000 +F04000 +7FE000 +7FE000 +1FC000 +ENDCHAR +STARTCHAR A +ENCODING 65 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 24 -1 0 +BITMAP +001C +003C +003C +003C +007E +007E +00EE +00EE +01CE +01CE +038E +038E +070E +070E +0E0E +0FFE +1FFE +1FFE +3806 +3807 +7007 +7007 +E007 +E007 +ENDCHAR +STARTCHAR B +ENCODING 66 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 0 0 +BITMAP +07FE00 +07FF00 +07FF80 +0E0380 +0E0380 +0E0380 +0E0380 +1C0380 +1C0700 +1C0F00 +1FFE00 +1FFC00 +3FFE00 +380700 +380700 +380700 +380700 +700E00 +700E00 +700E00 +701C00 +7FFC00 +FFF800 +FFE000 +ENDCHAR +STARTCHAR C +ENCODING 67 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 1 0 +BITMAP +00FC00 +03FF00 +07FF00 +0F0780 +1E0380 +1C0380 +3C0200 +380000 +380000 +380000 +700000 +700000 +700000 +700000 +600000 +E00000 +E00000 +E00800 +E01C00 +E03C00 +707800 +7FF000 +3FE000 +1FC000 +ENDCHAR +STARTCHAR D +ENCODING 68 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 24 0 0 +BITMAP +07FE00 +0FFF00 +0FFF80 +0E03C0 +0E01C0 +0E01C0 +1C01C0 +1C01C0 +1C01C0 +1C0180 +1C0380 +380380 +380380 +380380 +380300 +380700 +700700 +700700 +700E00 +701E00 +703C00 +FFF800 +FFF000 +FFC000 +ENDCHAR +STARTCHAR E +ENCODING 69 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 19 24 0 0 +BITMAP +07FFE0 +07FFE0 +07FFE0 +060000 +0E0000 +0E0000 +0E0000 +0E0000 +0C0000 +1C0000 +1FF800 +1FF800 +1FF800 +380000 +380000 +380000 +380000 +380000 +700000 +700000 +700000 +7FFE00 +7FFC00 +FFFC00 +ENDCHAR +STARTCHAR F +ENCODING 70 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 19 24 0 0 +BITMAP +07FFE0 +07FFE0 +07FFE0 +060000 +0E0000 +0E0000 +0E0000 +0E0000 +0C0000 +1C0000 +1C0000 +1FF800 +1FF800 +3FF000 +380000 +380000 +380000 +380000 +700000 +700000 +700000 +700000 +700000 +E00000 +ENDCHAR +STARTCHAR G +ENCODING 71 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 1 0 +BITMAP +00FC00 +03FF00 +07FF80 +0F0780 +1E0380 +1C0380 +380380 +380000 +380000 +700000 +700000 +70FF00 +70FF00 +61FE00 +E00E00 +E00E00 +E00E00 +E00E00 +E01C00 +E03C00 +F07800 +7FF800 +7FF000 +1FC000 +ENDCHAR +STARTCHAR H +ENCODING 72 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 19 24 0 0 +BITMAP +0700E0 +0E00C0 +0E01C0 +0E01C0 +0E01C0 +0E01C0 +1C0180 +1C0380 +1C0380 +1C0380 +1FFF80 +3FFF00 +3FFF00 +380700 +380700 +300700 +700E00 +700E00 +700E00 +700E00 +600E00 +E01C00 +E01C00 +E01C00 +ENDCHAR +STARTCHAR I +ENCODING 73 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 1 0 +BITMAP +0FFF80 +0FFF80 +0FFF00 +006000 +00E000 +00E000 +00E000 +00E000 +00C000 +01C000 +01C000 +01C000 +01C000 +018000 +038000 +038000 +038000 +038000 +070000 +070000 +070000 +FFF800 +FFF000 +FFF000 +ENDCHAR +STARTCHAR J +ENCODING 74 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 24 0 0 +BITMAP +000FC0 +001FC0 +001FC0 +0001C0 +000180 +000380 +000380 +000380 +000380 +000300 +000700 +000700 +000700 +000700 +000E00 +000E00 +000E00 +001C00 +E01C00 +E03C00 +F07800 +7FF000 +7FE000 +1F8000 +ENDCHAR +STARTCHAR K +ENCODING 75 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 21 24 0 0 +BITMAP +0700F8 +0701E0 +0E03C0 +0E0780 +0E0F00 +0E1E00 +0E3C00 +1C7800 +1CF000 +1DE000 +1FC000 +1FC000 +3FE000 +38E000 +38E000 +387000 +307000 +707800 +703800 +703C00 +701C00 +E01C00 +E00E00 +E00E00 +ENDCHAR +STARTCHAR L +ENCODING 76 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 13 24 1 0 +BITMAP +0700 +0E00 +0E00 +0E00 +0E00 +0E00 +1C00 +1C00 +1C00 +1C00 +1C00 +3800 +3800 +3800 +3800 +3800 +7000 +7000 +7000 +7000 +7000 +FFF8 +FFF8 +FFF8 +ENDCHAR +STARTCHAR M +ENCODING 77 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 20 24 -1 0 +BITMAP +070070 +0700F0 +0780F0 +0781E0 +0F81E0 +0F83E0 +0F87E0 +0F87E0 +0FCEC0 +1DCFC0 +1DDDC0 +1DDDC0 +1DF9C0 +38F9C0 +38F380 +38E380 +38E380 +380380 +700380 +700700 +700700 +700700 +E00700 +E00700 +ENDCHAR +STARTCHAR N +ENCODING 78 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 19 24 0 0 +BITMAP +0700E0 +0F01C0 +0F81C0 +0F81C0 +0F81C0 +0F81C0 +1FC380 +1DC380 +1DC380 +1DC380 +1DE380 +38E700 +38E700 +38E700 +38F700 +387F00 +707E00 +707E00 +707E00 +703E00 +703E00 +E03C00 +E03C00 +E01C00 +ENDCHAR +STARTCHAR O +ENCODING 79 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 1 0 +BITMAP +01FC00 +07FE00 +0FFF00 +0F0700 +1C0380 +1C0380 +380380 +380380 +380300 +700700 +700700 +700700 +700700 +E00600 +E00E00 +E00E00 +E00E00 +E01C00 +E01C00 +E03C00 +F07800 +FFF000 +7FE000 +1F8000 +ENDCHAR +STARTCHAR P +ENCODING 80 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 24 0 0 +BITMAP +07FF00 +07FF80 +07FFC0 +0701C0 +0E01C0 +0E01C0 +0E01C0 +0E01C0 +0E01C0 +1C0380 +1C0780 +1FFF00 +1FFE00 +1FF800 +380000 +380000 +380000 +380000 +300000 +700000 +700000 +700000 +700000 +E00000 +ENDCHAR +STARTCHAR Q +ENCODING 81 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 25 29 0 -5 +BITMAP +00FE0000 +03FF0000 +07FF8000 +07038000 +0E01C000 +0E01C000 +1C01C000 +1C018000 +18018000 +38038000 +38038000 +38038000 +38038000 +70030000 +70070000 +70070000 +70070000 +700E0000 +700E0000 +701E0000 +783C0000 +7FF80000 +FFF00000 +FFE00780 +FF801F80 +FFE07F80 +79FFF800 +007FE000 +001F8000 +ENDCHAR +STARTCHAR R +ENCODING 82 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 24 0 0 +BITMAP +07FE00 +07FF80 +07FFC0 +0E01C0 +0E01C0 +0E01C0 +0E01C0 +0E01C0 +1C0380 +1C0380 +1C0780 +1FFF00 +1FFE00 +3FFC00 +38E000 +38E000 +38F000 +307000 +707800 +703800 +703C00 +701C00 +E01E00 +E00E00 +ENDCHAR +STARTCHAR S +ENCODING 83 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 24 0 0 +BITMAP +00FE00 +03FF80 +07FFC0 +0701C0 +0E0180 +0E0100 +0E0000 +0C0000 +0E0000 +0F0000 +07E000 +03F800 +007E00 +001E00 +000F00 +000700 +000700 +000E00 +200E00 +600E00 +F01C00 +7FFC00 +7FF800 +1FE000 +ENDCHAR +STARTCHAR T +ENCODING 84 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 3 0 +BITMAP +FFFF80 +FFFF80 +FFFF80 +018000 +038000 +038000 +038000 +038000 +030000 +070000 +070000 +070000 +070000 +0E0000 +0E0000 +0E0000 +0E0000 +0E0000 +1C0000 +1C0000 +1C0000 +1C0000 +1C0000 +380000 +ENDCHAR +STARTCHAR U +ENCODING 85 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 24 1 0 +BITMAP +0E01C0 +0C0380 +1C0380 +1C0380 +1C0380 +1C0380 +380700 +380700 +380700 +380700 +380600 +700E00 +700E00 +700E00 +700E00 +701C00 +E01C00 +E01C00 +E03C00 +E03800 +F07800 +7FF000 +7FE000 +1F8000 +ENDCHAR +STARTCHAR V +ENCODING 86 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 24 4 0 +BITMAP +E00F +E00E +E00E +E01C +E01C +E038 +E038 +E070 +E070 +E0E0 +E0E0 +61C0 +71C0 +7380 +7380 +7700 +7700 +7E00 +7E00 +7C00 +7C00 +7800 +7800 +7000 +ENDCHAR +STARTCHAR W +ENCODING 87 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 24 2 0 +BITMAP +7001C0 +7001C0 +700380 +700380 +700380 +700700 +700700 +71C700 +73CE00 +63CE00 +67CE00 +E7DC00 +E7DC00 +EFDC00 +EFF800 +FDF800 +FDF800 +F9F000 +F9F000 +F1F000 +F1E000 +F1E000 +E1E000 +E1C000 +ENDCHAR +STARTCHAR X +ENCODING 88 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 21 24 -1 0 +BITMAP +070078 +0700F0 +0380E0 +0381C0 +0383C0 +01C380 +01C700 +01CE00 +00FE00 +00FC00 +00F800 +007000 +00F000 +00F000 +01F800 +03B800 +07B800 +071C00 +0E1C00 +1C1C00 +3C0E00 +380E00 +700E00 +E00700 +ENDCHAR +STARTCHAR Y +ENCODING 89 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 3 0 +BITMAP +E00380 +700700 +700F00 +700E00 +701C00 +383C00 +383800 +387000 +38F000 +1CE000 +1DC000 +1FC000 +1F8000 +0F0000 +0F0000 +0E0000 +0E0000 +0E0000 +0C0000 +1C0000 +1C0000 +1C0000 +1C0000 +380000 +ENDCHAR +STARTCHAR Z +ENCODING 90 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 22 26 -1 -2 +BITMAP +07FFF0 +07FFF0 +07FFF0 +0000E0 +0001C0 +000380 +000780 +000F00 +000E00 +001C00 +003800 +007800 +00F000 +01E000 +01C000 +038000 +070000 +0F0000 +1E0000 +3C0000 +380000 +7F801C +FFF07C +FFFFFC +007FE0 +000F80 +ENDCHAR +STARTCHAR bracketleft +ENCODING 91 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 33 2 -4 +BITMAP +03FF +03FF +03FF +0380 +0300 +0700 +0700 +0700 +0700 +0600 +0E00 +0E00 +0E00 +0E00 +1C00 +1C00 +1C00 +1C00 +1C00 +3800 +3800 +3800 +3800 +3800 +7000 +7000 +7000 +7000 +7000 +E000 +FFC0 +FFC0 +FF80 +ENDCHAR +STARTCHAR backslash +ENCODING 92 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 8 34 5 -5 +BITMAP +E0 +E0 +E0 +60 +70 +70 +70 +70 +70 +70 +38 +38 +38 +38 +38 +38 +1C +1C +1C +1C +1C +1C +0E +0E +0E +0E +0E +0E +06 +07 +07 +07 +07 +07 +ENDCHAR +STARTCHAR bracketright +ENCODING 93 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 33 2 -4 +BITMAP +03FF +03FF +03FF +000E +000E +000E +000E +000E +001C +001C +001C +001C +001C +0038 +0038 +0038 +0038 +0030 +0070 +0070 +0070 +0070 +0060 +00E0 +00E0 +00E0 +00E0 +00C0 +01C0 +01C0 +FFC0 +FFC0 +FF80 +ENDCHAR +STARTCHAR asciicircum +ENCODING 94 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 15 9 3 16 +BITMAP +0080 +00C0 +03E0 +07F0 +0F78 +3E7C +783C +F01E +600C +ENDCHAR +STARTCHAR underscore +ENCODING 95 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 3 -3 -5 +BITMAP +7FFFC0 +FFFFC0 +FFFF80 +ENDCHAR +STARTCHAR grave +ENCODING 96 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 7 8 8 17 +BITMAP +60 +F0 +F8 +78 +3C +1E +0C +08 +ENDCHAR +STARTCHAR a +ENCODING 97 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 19 0 0 +BITMAP +00FC +03FE +07FE +0F06 +1E0E +1C0E +380E +380C +700C +701C +701C +601C +E038 +E038 +6078 +70FA +7FFF +3FBF +1F1E +ENDCHAR +STARTCHAR b +ENCODING 98 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 1 0 +BITMAP +0E0000 +0E0000 +1C0000 +1C0000 +1C0000 +1C0000 +1C1C00 +383E00 +386600 +386600 +387F80 +303F80 +700F00 +700E00 +701C00 +701C00 +603800 +603800 +E07000 +E07000 +70E000 +7FC000 +3F8000 +1F0000 +ENDCHAR +STARTCHAR c +ENCODING 99 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 19 1 0 +BITMAP +01F8 +03FE +0FFE +1E0F +1C06 +3800 +3800 +7000 +7000 +6000 +E000 +E000 +E000 +E000 +E018 +F07C +FFF8 +7FE0 +3F80 +ENDCHAR +STARTCHAR d +ENCODING 100 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 1 0 +BITMAP +000380 +000380 +000300 +000700 +000700 +01F700 +07FF00 +0FFE00 +1E1E00 +380E00 +780E00 +700E00 +600C00 +E01C00 +E01C00 +E01C00 +C01C00 +C03800 +C03800 +C03800 +E07A00 +FFFE00 +FFFF00 +3F3E00 +ENDCHAR +STARTCHAR e +ENCODING 101 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 19 0 0 +BITMAP +007C +01FE +03FF +0787 +0F07 +0E07 +1C07 +1C0E +183C +39F8 +3FF0 +7FC0 +FE00 +F804 +7806 +3C1E +1FFC +0FF8 +07C0 +ENDCHAR +STARTCHAR f +ENCODING 102 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 30 1 -6 +BITMAP +003E00 +007F00 +00FF80 +01C380 +01C380 +038200 +038000 +070000 +070000 +3FFE00 +FFFC00 +CFFC00 +7C0000 +3E0000 +1F0000 +1F8000 +1B8000 +3BC000 +39C000 +38C000 +30E000 +30C000 +70C000 +70C000 +71C000 +71C000 +738000 +7F8000 +3E0000 +080000 +ENDCHAR +STARTCHAR g +ENCODING 103 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 25 0 -6 +BITMAP +007E00 +01FF00 +03FF80 +078380 +0F0300 +1E0300 +1C0700 +380700 +380700 +300600 +700E00 +700E00 +700E00 +381E00 +3FFC00 +1FFC00 +0FDC00 +001F00 +1FFF00 +7FFE00 +FEF000 +E3E000 +FFC000 +FF0000 +100000 +ENDCHAR +STARTCHAR h +ENCODING 104 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 24 0 0 +BITMAP +0700 +0E00 +0E00 +0E00 +0E00 +0C7C +1DFE +1FFF +1F87 +1F07 +3E07 +3C06 +380E +380E +380E +700C +701C +701C +701C +7018 +E039 +E03F +E03F +E01E +ENDCHAR +STARTCHAR i +ENCODING 105 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 11 25 4 0 +BITMAP +0F00 +0F00 +0F00 +0E00 +0000 +0000 +0000 +3000 +3800 +7800 +3800 +3800 +3800 +3800 +3000 +7000 +7000 +7000 +E000 +E000 +E040 +E0E0 +F1E0 +7FC0 +3F80 +ENDCHAR +STARTCHAR j +ENCODING 106 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 19 31 -2 -6 +BITMAP +0001E0 +0001E0 +0001E0 +0001C0 +000000 +000000 +000000 +000600 +000700 +000780 +000380 +000380 +000380 +000300 +000700 +000700 +000700 +000700 +000600 +000E00 +000E00 +000E00 +001C00 +001C00 +03FF00 +1FFF00 +7FFE00 +F8F000 +FFE000 +FFC000 +7E0000 +ENDCHAR +STARTCHAR k +ENCODING 107 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 0 0 +BITMAP +070000 +070000 +070000 +070000 +0E0000 +0E7C00 +0FFF00 +0FFF00 +0F8380 +1F0380 +1E0380 +1C0700 +1C0F00 +1CFE00 +39FC00 +39E000 +38E000 +38E000 +306000 +707400 +707600 +707F00 +707E00 +E03800 +ENDCHAR +STARTCHAR l +ENCODING 108 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 -2 0 +BITMAP +000E00 +003F80 +003F80 +007380 +007380 +00E380 +00E380 +00E380 +00E380 +00C700 +00C700 +01CE00 +01DE00 +01DC00 +01F800 +01F800 +01F000 +01E000 +07C000 +0FC100 +3FE380 +F8FF00 +70FE00 +407C00 +ENDCHAR +STARTCHAR m +ENCODING 109 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 19 0 0 +BITMAP +79CF00 +FFFF80 +FFFF80 +5C7380 +1CE380 +1CE380 +18E300 +38E700 +38C700 +39C600 +39C600 +31CE00 +71CE00 +718C00 +738C00 +739C80 +639F80 +E39F80 +E30F00 +ENDCHAR +STARTCHAR n +ENCODING 110 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 19 1 0 +BITMAP +7878 +FDFC +FFFE +9F8E +1E0E +3E0E +3C0E +380C +381C +301C +701C +7038 +7038 +7038 +6030 +E032 +E03E +E03F +E03C +ENDCHAR +STARTCHAR o +ENCODING 111 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 15 19 1 0 +BITMAP +01F8 +07FC +0FFE +1E0E +1C0E +380E +380E +700E +700E +700E +600C +601C +E01C +E038 +E038 +F0F0 +7FE0 +7FC0 +1F00 +ENDCHAR +STARTCHAR p +ENCODING 112 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 24 0 -5 +BITMAP +3C7C00 +7FFF00 +7FFF00 +2F0780 +0E0380 +0E0380 +0C0300 +1C0300 +1C0300 +1C0700 +180700 +380700 +380E00 +380E00 +381C00 +383C00 +7FF800 +7FF000 +7FC000 +700000 +600000 +E00000 +E00000 +E00000 +ENDCHAR +STARTCHAR q +ENCODING 113 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 24 1 -5 +BITMAP +01FF +07FF +0FFF +1E1E +1C0E +380E +380E +700C +701C +701C +601C +601C +E018 +E038 +E038 +F078 +7FF8 +7FF0 +3F70 +0070 +0070 +0070 +0060 +00E0 +ENDCHAR +STARTCHAR r +ENCODING 114 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 15 19 1 0 +BITMAP +3800 +7C0C +6E1E +EEFC +7FFC +3FF8 +1E30 +3870 +7860 +F0E0 +60E0 +21C0 +01C0 +01C0 +01C4 +01CE +01FE +01FC +00F0 +ENDCHAR +STARTCHAR s +ENCODING 115 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 19 0 0 +BITMAP +00F0 +01F0 +01B8 +01B8 +01F0 +00F0 +00F0 +01F8 +07F8 +3F9C +3E1C +3018 +0018 +003A +E03F +F07F +7FFE +3FF8 +1FC0 +ENDCHAR +STARTCHAR t +ENCODING 116 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 13 24 3 0 +BITMAP +0700 +0700 +0E00 +0E00 +0E00 +FFF8 +FFF0 +FFF0 +1C00 +1C00 +1C00 +1800 +3800 +3800 +3800 +3800 +3000 +7000 +7000 +7040 +7070 +7FE0 +3FC0 +1F80 +ENDCHAR +STARTCHAR u +ENCODING 117 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 19 1 0 +BITMAP +7807 +F806 +FC0E +9C0E +180E +180E +380C +381C +381C +701C +701C +7038 +6038 +E078 +E0F8 +E1F2 +FFFE +7F3F +3E3C +ENDCHAR +STARTCHAR v +ENCODING 118 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 15 19 3 0 +BITMAP +E00E +E00E +E00C +E01C +601C +7038 +7038 +7070 +70E0 +70E0 +71C0 +73C0 +3B80 +3F00 +3F00 +3E00 +3E00 +3C00 +3800 +ENDCHAR +STARTCHAR w +ENCODING 119 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 19 2 0 +BITMAP +E00380 +E00380 +E00300 +E00700 +E00700 +E00600 +E38E00 +E38E00 +E78C00 +E79C00 +E79C00 +EFB800 +FDB800 +FDF000 +F9F000 +F1E000 +F1E000 +E1E000 +E1C000 +ENDCHAR +STARTCHAR x +ENCODING 120 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 19 0 0 +BITMAP +1E03C0 +0E0380 +0E0780 +070700 +070E00 +079C00 +03BC00 +03F800 +01F000 +01E000 +03E000 +07E000 +0FF000 +1E7000 +1C7000 +383800 +703800 +F03C00 +E01C00 +ENDCHAR +STARTCHAR y +ENCODING 121 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 25 0 -6 +BITMAP +1E0380 +3F0380 +3F0380 +170380 +070300 +070700 +060700 +0E0700 +0E0600 +0C0600 +1C0E00 +1C0E00 +1C0E00 +1C1C00 +1FFC00 +0FFC00 +07FC00 +01FF00 +1FFF00 +7FFE00 +FCF000 +E3E000 +FFC000 +FF0000 +100000 +ENDCHAR +STARTCHAR z +ENCODING 122 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 20 20 0 -1 +BITMAP +0FFF80 +0FFF80 +0FFF00 +000E00 +001E00 +003C00 +007800 +007000 +00E000 +01E000 +03C000 +078000 +070000 +0E0000 +1C0000 +3C0000 +7F8070 +7FFFF0 +FFFFE0 +007F00 +ENDCHAR +STARTCHAR braceleft +ENCODING 123 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 14 33 4 -4 +BITMAP +001C +007C +01FC +01E0 +0380 +0380 +0700 +0700 +0700 +0700 +0700 +0700 +0F00 +1E00 +3C00 +7800 +F000 +F000 +7800 +3800 +1C00 +1C00 +1C00 +3800 +3800 +3800 +7000 +7000 +7000 +7800 +3F00 +3F00 +0F00 +ENDCHAR +STARTCHAR bar +ENCODING 124 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 10 34 4 -5 +BITMAP +01C0 +01C0 +01C0 +0380 +0380 +0380 +0380 +0380 +0700 +0700 +0700 +0700 +0700 +0E00 +0E00 +0E00 +0E00 +0E00 +1C00 +1C00 +1C00 +1C00 +1C00 +3800 +3800 +3800 +3800 +3800 +7000 +7000 +7000 +7000 +6000 +E000 +ENDCHAR +STARTCHAR braceright +ENCODING 125 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 15 33 0 -4 +BITMAP +0180 +03F0 +03F8 +0078 +0038 +0018 +0038 +0038 +0038 +0070 +0070 +0070 +0070 +0070 +0078 +003C +001E +003C +0078 +00F0 +01E0 +01C0 +0180 +0380 +0380 +0380 +0380 +0380 +0780 +0F00 +FE00 +FC00 +F000 +ENDCHAR +STARTCHAR asciitilde +ENCODING 126 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 6 1 9 +BITMAP +1E0000 +7F8380 +FFC780 +E1FF00 +E0FE00 +007C00 +ENDCHAR +STARTCHAR arrowleft +ENCODING 8592 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 17 14 1 4 +BITMAP +018000 +03C000 +078000 +0F0000 +1C0000 +7FFF80 +FFFF80 +7FFF80 +380000 +3C0000 +1E0000 +0F0000 +060000 +040000 +ENDCHAR +STARTCHAR arrowup +ENCODING 8593 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 14 23 3 0 +BITMAP +0080 +01C0 +07E0 +0FF0 +1FF8 +3FB8 +F3BC +6398 +4710 +0700 +0700 +0700 +0700 +0E00 +0E00 +0E00 +0E00 +0C00 +1C00 +1C00 +1C00 +1C00 +3800 +ENDCHAR +STARTCHAR arrowright +ENCODING 8594 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 16 14 1 4 +BITMAP +0030 +0070 +0078 +003C +001E +FFFF +FFFF +FFFE +003C +0078 +00F0 +03C0 +0180 +0100 +ENDCHAR +STARTCHAR arrowdown +ENCODING 8595 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 14 23 1 0 +BITMAP +0070 +0070 +0070 +0060 +00E0 +00E0 +00E0 +00E0 +01C0 +01C0 +01C0 +01C0 +01C0 +0380 +2388 +739C +F3BC +7BF8 +3FF0 +1FC0 +0F80 +0F00 +0600 +ENDCHAR +STARTCHAR uni21B9 +ENCODING 8633 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 21 24 -1 0 +BITMAP +0E0C00 +0C1E00 +0C3C00 +0CF000 +1DFFF8 +1BFFF0 +1BFFF0 +19F000 +38F000 +387800 +303000 +000000 +000000 +0060E0 +01E0C0 +00F0C0 +0078C0 +FFFDC0 +FFFFC0 +FFFD80 +00F180 +01E180 +03C380 +010000 +ENDCHAR +STARTCHAR uni21E4 +ENCODING 8676 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 15 0 4 +BITMAP +001000 +003000 +307800 +30F000 +71E000 +638000 +6FFFC0 +7FFFC0 +EFFFC0 +E70000 +C78000 +C3C000 +01E000 +00C000 +008000 +ENDCHAR +STARTCHAR uni21E5 +ENCODING 8677 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 19 15 0 4 +BITMAP +004000 +006000 +00E060 +00F0E0 +0078C0 +003CC0 +7FFEC0 +7FFFC0 +FFFDC0 +007980 +00F180 +01E180 +078200 +030000 +020000 +ENDCHAR +STARTCHAR uni21E7 +ENCODING 8679 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 18 18 0 3 +BITMAP +001000 +003000 +007800 +00FC00 +03FC00 +079E00 +0F0E00 +1E0F00 +3F1F80 +7E1F80 +FE1FC0 +0E1C00 +0E3800 +0E3800 +1C3800 +1FF800 +1FF000 +1FF000 +ENDCHAR +STARTCHAR uni25A2 +ENCODING 9634 +SWIDTH 545 0 +DWIDTH 17 0 +BBX 15 14 1 4 +BITMAP +1FF8 +7FFC +7FFE +F00E +E00E +E00E +E00E +E00E +E00E +E00E +F00E +7FFE +7FFC +1FF8 +ENDCHAR +ENDFONT diff --git a/fonts/VictorMonoNerdFont-SemiBoldItalic-32.pcf b/fonts/VictorMonoNerdFont-SemiBoldItalic-32.pcf new file mode 100644 index 0000000..693266f Binary files /dev/null and b/fonts/VictorMonoNerdFont-SemiBoldItalic-32.pcf differ diff --git a/fonts/VictorMonoNerdFont-SemiBoldItalic.ttf b/fonts/VictorMonoNerdFont-SemiBoldItalic.ttf new file mode 100644 index 0000000..9247df8 Binary files /dev/null and b/fonts/VictorMonoNerdFont-SemiBoldItalic.ttf differ diff --git a/fonts/convert_font.py b/fonts/convert_font.py new file mode 100644 index 0000000..581911e --- /dev/null +++ b/fonts/convert_font.py @@ -0,0 +1,15 @@ +import os, sys +sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) +import characters +import fontforge +font = fontforge.open("VictorMonoNerdFont-SemiBoldItalic.ttf") +font.selection.none() +for char in characters.get_character_set(): + font.selection.select(("more",), ord(char)) +font.selection.invert() +font.clear() +size = 32 +font.selection.all() +font.bitmapSizes = ((size,),) +font.regenBitmaps((size,)) +font.generate(f"VictorMonoNerdFont-SemiBoldItalic.bdf", bitmap_type="bdf", bitmap_resolution=96) diff --git a/fonts/flake.lock b/fonts/flake.lock new file mode 100644 index 0000000..d31754c --- /dev/null +++ b/fonts/flake.lock @@ -0,0 +1,57 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 0, + "narHash": "sha256-Qn3nPMSopRQJgmvHzVqPcE3I03zJyl8cSbgnnltfFDY=", + "path": "/nix/store/avxvalb7xf8x4avmrbcvn1vr5yy46kxs-source", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "utils": "utils" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/fonts/flake.nix b/fonts/flake.nix new file mode 100644 index 0000000..0cfc97c --- /dev/null +++ b/fonts/flake.nix @@ -0,0 +1,17 @@ +{ + inputs = { + utils.url = "github:numtide/flake-utils"; + }; + outputs = { self, nixpkgs, utils }: utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in + { + devShell = pkgs.mkShell { + buildInputs = with pkgs; [ + ( python3.withPackages ( ps: [ ps.fontforge ] ) ) + ]; + }; + } + ); +} diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000..b0e5ea0 --- /dev/null +++ b/setup.sh @@ -0,0 +1,20 @@ +#!/bin/bash +echo "Flashing $1" +cp $1 /run/media/skyrgobbler/RPI-RP2/. +echo "Letting settle" +while [[ ! -d /run/media/skyrgobbler/CIRCUITPY ]] +do + sleep 1 +done +echo "Making font directory" +mkdir /run/media/skyrgobbler/CIRCUITPY/fonts +echo "Adding fonts" +cp fonts/VictorMonoNerdFont-SemiBoldItalic-32.pcf /run/media/skyrgobbler/CIRCUITPY/fonts/. +echo "Installing libraries" +circup install adafruit_display_text +circup install adafruit_hid +circup install gc9a01 +echo "Adding character map" +cp characters.py /run/media/skyrgobbler/CIRCUITPY/. +echo "Adding code" +cp code.py /run/media/skyrgobbler/CIRCUITPY/.