diff --git a/sys/include/fonts/default.h b/sys/include/fonts/default.h new file mode 100644 index 0000000..fe80ee6 --- /dev/null +++ b/sys/include/fonts/default.h @@ -0,0 +1,259 @@ +const unsigned char Default[] = { + 0x08, 0x01, 0x00, 0xFF, 1, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x0E, 0x1F, 0x15, 0x1F, 0x1B, 0x11, 0x0E, 0x00, + 0x06, 0x0E, 0x1F, 0x15, 0x1F, 0x11, 0x1B, 0x0E, 0x00, + 0x06, 0x00, 0x0A, 0x1F, 0x1F, 0x1F, 0x0E, 0x04, 0x00, + 0x06, 0x00, 0x04, 0x0E, 0x1F, 0x1F, 0x0E, 0x04, 0x00, + 0x06, 0x0E, 0x0A, 0x1F, 0x15, 0x1F, 0x04, 0x0E, 0x00, + 0x06, 0x04, 0x0E, 0x1F, 0x1F, 0x1F, 0x04, 0x0E, 0x00, + 0x06, 0x00, 0x00, 0x04, 0x0E, 0x0E, 0x04, 0x00, 0x00, + 0x06, 0x1F, 0x1F, 0x1B, 0x11, 0x11, 0x1B, 0x1F, 0x1F, + 0x06, 0x00, 0x00, 0x04, 0x0A, 0x0A, 0x04, 0x00, 0x00, + 0x06, 0x1F, 0x1F, 0x1B, 0x15, 0x15, 0x1B, 0x1F, 0x1F, + 0x06, 0x00, 0x1C, 0x18, 0x16, 0x05, 0x05, 0x02, 0x00, + 0x06, 0x0E, 0x11, 0x11, 0x0E, 0x04, 0x1F, 0x04, 0x00, + 0x06, 0x1E, 0x12, 0x1E, 0x02, 0x02, 0x02, 0x03, 0x00, + 0x06, 0x1E, 0x12, 0x1E, 0x12, 0x12, 0x1A, 0x03, 0x00, + 0x06, 0x04, 0x15, 0x0E, 0x1B, 0x1B, 0x0E, 0x15, 0x04, + 0x06, 0x01, 0x03, 0x0F, 0x1F, 0x0F, 0x03, 0x01, 0x00, + 0x06, 0x10, 0x18, 0x1E, 0x1F, 0x1E, 0x18, 0x10, 0x00, + 0x06, 0x04, 0x0E, 0x15, 0x04, 0x15, 0x0E, 0x04, 0x00, + 0x06, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x1B, 0x00, + 0x06, 0x1E, 0x15, 0x15, 0x16, 0x14, 0x14, 0x14, 0x00, + 0x06, 0x0C, 0x12, 0x0A, 0x14, 0x08, 0x12, 0x12, 0x0C, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x00, + 0x06, 0x04, 0x0E, 0x15, 0x04, 0x15, 0x0E, 0x04, 0x1F, + 0x06, 0x00, 0x04, 0x0E, 0x15, 0x04, 0x04, 0x04, 0x00, + 0x06, 0x00, 0x04, 0x04, 0x04, 0x15, 0x0E, 0x04, 0x00, + 0x06, 0x00, 0x04, 0x08, 0x1F, 0x08, 0x04, 0x00, 0x00, + 0x06, 0x00, 0x04, 0x02, 0x1F, 0x02, 0x04, 0x00, 0x00, + 0x06, 0x00, 0x01, 0x01, 0x01, 0x1F, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x0A, 0x1F, 0x1F, 0x0A, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x04, 0x04, 0x0E, 0x1F, 0x1F, 0x00, 0x00, + 0x06, 0x00, 0x1F, 0x1F, 0x0E, 0x04, 0x04, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x04, 0x00, + 0x06, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x0A, 0x0A, 0x1F, 0x0A, 0x1F, 0x0A, 0x0A, 0x00, + 0x06, 0x04, 0x1E, 0x05, 0x0E, 0x14, 0x0F, 0x04, 0x00, + 0x06, 0x03, 0x13, 0x08, 0x04, 0x02, 0x19, 0x18, 0x00, + 0x06, 0x02, 0x05, 0x05, 0x02, 0x15, 0x09, 0x16, 0x00, + 0x06, 0x0C, 0x0C, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08, 0x00, + 0x06, 0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x02, 0x00, + 0x06, 0x04, 0x15, 0x0E, 0x1F, 0x0E, 0x15, 0x04, 0x00, + 0x06, 0x00, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x04, 0x02, + 0x06, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, + 0x06, 0x00, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x06, 0x0E, 0x11, 0x19, 0x15, 0x13, 0x11, 0x0E, 0x00, + 0x06, 0x04, 0x06, 0x04, 0x04, 0x04, 0x04, 0x0E, 0x00, + 0x06, 0x0E, 0x11, 0x10, 0x0E, 0x01, 0x01, 0x1F, 0x00, + 0x06, 0x1F, 0x10, 0x08, 0x0C, 0x10, 0x11, 0x0E, 0x00, + 0x06, 0x08, 0x0C, 0x0A, 0x09, 0x1F, 0x08, 0x08, 0x00, + 0x06, 0x1F, 0x01, 0x0F, 0x10, 0x10, 0x11, 0x0E, 0x00, + 0x06, 0x1C, 0x02, 0x01, 0x0F, 0x11, 0x11, 0x0E, 0x00, + 0x06, 0x1F, 0x10, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, + 0x06, 0x0E, 0x11, 0x11, 0x0E, 0x11, 0x11, 0x0E, 0x00, + 0x06, 0x0E, 0x11, 0x11, 0x1E, 0x10, 0x08, 0x07, 0x00, + 0x06, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x02, 0x00, + 0x06, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x06, 0x02, 0x04, 0x08, 0x10, 0x08, 0x04, 0x02, 0x00, + 0x06, 0x0E, 0x11, 0x10, 0x0C, 0x04, 0x00, 0x04, 0x00, + 0x06, 0x0E, 0x11, 0x15, 0x1D, 0x0D, 0x01, 0x1E, 0x00, + 0x06, 0x04, 0x0A, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x00, + 0x06, 0x0F, 0x11, 0x11, 0x0F, 0x11, 0x11, 0x0F, 0x00, + 0x06, 0x0E, 0x11, 0x01, 0x01, 0x01, 0x11, 0x0E, 0x00, + 0x06, 0x0F, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0F, 0x00, + 0x06, 0x1F, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x1F, 0x00, + 0x06, 0x1F, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x01, 0x00, + 0x06, 0x1E, 0x11, 0x01, 0x01, 0x19, 0x11, 0x1E, 0x00, + 0x06, 0x11, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11, 0x00, + 0x06, 0x0E, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0E, 0x00, + 0x06, 0x1C, 0x08, 0x08, 0x08, 0x08, 0x09, 0x06, 0x00, + 0x06, 0x11, 0x09, 0x05, 0x03, 0x05, 0x09, 0x11, 0x00, + 0x06, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x1F, 0x00, + 0x06, 0x11, 0x1B, 0x15, 0x15, 0x15, 0x11, 0x11, 0x00, + 0x06, 0x11, 0x11, 0x13, 0x15, 0x19, 0x11, 0x11, 0x00, + 0x06, 0x0E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00, + 0x06, 0x0F, 0x11, 0x11, 0x0F, 0x01, 0x01, 0x01, 0x00, + 0x06, 0x0E, 0x11, 0x11, 0x11, 0x15, 0x09, 0x16, 0x00, + 0x06, 0x0F, 0x11, 0x11, 0x0F, 0x05, 0x09, 0x11, 0x00, + 0x06, 0x0E, 0x11, 0x01, 0x0E, 0x10, 0x11, 0x0E, 0x00, + 0x06, 0x1F, 0x15, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, + 0x06, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00, + 0x06, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0A, 0x04, 0x00, + 0x06, 0x11, 0x11, 0x11, 0x15, 0x15, 0x15, 0x0A, 0x00, + 0x06, 0x11, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x11, 0x00, + 0x06, 0x11, 0x11, 0x0A, 0x04, 0x04, 0x04, 0x04, 0x00, + 0x06, 0x1F, 0x10, 0x08, 0x0E, 0x02, 0x01, 0x1F, 0x00, + 0x06, 0x1E, 0x02, 0x02, 0x02, 0x02, 0x02, 0x1E, 0x00, + 0x06, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, + 0x06, 0x1E, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1E, 0x00, + 0x06, 0x04, 0x0A, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, + 0x06, 0x06, 0x06, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x06, 0x08, 0x0E, 0x09, 0x1E, 0x00, + 0x06, 0x01, 0x01, 0x0D, 0x13, 0x11, 0x13, 0x0D, 0x00, + 0x06, 0x00, 0x00, 0x0E, 0x11, 0x01, 0x11, 0x0E, 0x00, + 0x06, 0x10, 0x10, 0x16, 0x19, 0x11, 0x19, 0x16, 0x00, + 0x06, 0x00, 0x00, 0x0E, 0x11, 0x1F, 0x01, 0x0E, 0x00, + 0x06, 0x08, 0x14, 0x04, 0x0E, 0x04, 0x04, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x0E, 0x19, 0x19, 0x16, 0x10, 0x0E, + 0x06, 0x01, 0x01, 0x0D, 0x13, 0x11, 0x11, 0x11, 0x00, + 0x06, 0x04, 0x00, 0x06, 0x04, 0x04, 0x04, 0x0E, 0x00, + 0x06, 0x08, 0x00, 0x08, 0x08, 0x08, 0x09, 0x06, 0x00, + 0x06, 0x01, 0x01, 0x09, 0x05, 0x03, 0x05, 0x09, 0x00, + 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0E, 0x00, + 0x06, 0x00, 0x00, 0x0B, 0x15, 0x15, 0x15, 0x15, 0x00, + 0x06, 0x00, 0x00, 0x0D, 0x13, 0x11, 0x11, 0x11, 0x00, + 0x06, 0x00, 0x00, 0x0E, 0x11, 0x11, 0x11, 0x0E, 0x00, + 0x06, 0x00, 0x00, 0x0D, 0x13, 0x13, 0x0D, 0x01, 0x01, + 0x06, 0x00, 0x00, 0x16, 0x19, 0x19, 0x16, 0x10, 0x10, + 0x06, 0x00, 0x00, 0x0D, 0x13, 0x01, 0x01, 0x01, 0x00, + 0x06, 0x00, 0x00, 0x1E, 0x01, 0x0E, 0x10, 0x0F, 0x00, + 0x06, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x14, 0x08, 0x00, + 0x06, 0x00, 0x00, 0x11, 0x11, 0x11, 0x19, 0x16, 0x00, + 0x06, 0x00, 0x00, 0x11, 0x11, 0x11, 0x0A, 0x04, 0x00, + 0x06, 0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x0A, 0x00, + 0x06, 0x00, 0x00, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x00, + 0x06, 0x00, 0x00, 0x11, 0x11, 0x1E, 0x10, 0x11, 0x0E, + 0x06, 0x00, 0x00, 0x1F, 0x08, 0x04, 0x02, 0x1F, 0x00, + 0x06, 0x08, 0x04, 0x04, 0x02, 0x04, 0x04, 0x08, 0x00, + 0x06, 0x04, 0x04, 0x04, 0x00, 0x04, 0x04, 0x04, 0x00, + 0x06, 0x02, 0x04, 0x04, 0x08, 0x04, 0x04, 0x02, 0x00, + 0x06, 0x02, 0x15, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x04, 0x0E, 0x1B, 0x11, 0x11, 0x1F, 0x00, 0x00, + 0x06, 0x0E, 0x11, 0x01, 0x01, 0x11, 0x0E, 0x08, 0x06, + 0x06, 0x00, 0x11, 0x00, 0x11, 0x11, 0x19, 0x16, 0x00, + 0x06, 0x18, 0x00, 0x0E, 0x11, 0x1F, 0x01, 0x1E, 0x00, + 0x06, 0x1F, 0x00, 0x06, 0x08, 0x0E, 0x09, 0x1E, 0x00, + 0x06, 0x11, 0x00, 0x06, 0x08, 0x0E, 0x09, 0x1E, 0x00, + 0x06, 0x03, 0x00, 0x06, 0x08, 0x0E, 0x09, 0x1E, 0x00, + 0x06, 0x0C, 0x00, 0x06, 0x08, 0x0E, 0x09, 0x1E, 0x00, + 0x06, 0x00, 0x1E, 0x03, 0x03, 0x1E, 0x08, 0x0C, 0x00, + 0x06, 0x1F, 0x00, 0x0E, 0x11, 0x1F, 0x01, 0x1E, 0x00, + 0x06, 0x11, 0x00, 0x0E, 0x11, 0x1F, 0x01, 0x1E, 0x00, + 0x06, 0x03, 0x00, 0x0E, 0x11, 0x1F, 0x01, 0x1E, 0x00, + 0x06, 0x14, 0x00, 0x0C, 0x08, 0x08, 0x08, 0x1C, 0x00, + 0x06, 0x0C, 0x12, 0x0C, 0x08, 0x08, 0x08, 0x1C, 0x00, + 0x06, 0x06, 0x00, 0x0C, 0x08, 0x08, 0x08, 0x1C, 0x00, + 0x06, 0x0A, 0x00, 0x04, 0x0A, 0x11, 0x1F, 0x11, 0x11, + 0x06, 0x04, 0x00, 0x04, 0x0A, 0x11, 0x1F, 0x11, 0x11, + 0x06, 0x0C, 0x00, 0x0F, 0x01, 0x07, 0x01, 0x0F, 0x00, + 0x06, 0x00, 0x00, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x00, + 0x06, 0x1C, 0x0A, 0x09, 0x1F, 0x09, 0x09, 0x19, 0x00, + 0x06, 0x0E, 0x11, 0x00, 0x0E, 0x11, 0x11, 0x0E, 0x00, + 0x06, 0x00, 0x11, 0x00, 0x0E, 0x11, 0x11, 0x0E, 0x00, + 0x06, 0x00, 0x03, 0x00, 0x0E, 0x11, 0x11, 0x0E, 0x00, + 0x06, 0x0E, 0x11, 0x00, 0x11, 0x11, 0x19, 0x16, 0x00, + 0x06, 0x00, 0x03, 0x00, 0x11, 0x11, 0x19, 0x16, 0x00, + 0x06, 0x12, 0x00, 0x12, 0x12, 0x12, 0x1C, 0x10, 0x0E, + 0x06, 0x11, 0x00, 0x0E, 0x11, 0x11, 0x11, 0x0E, 0x00, + 0x06, 0x11, 0x00, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00, + 0x06, 0x04, 0x04, 0x1F, 0x05, 0x05, 0x1F, 0x04, 0x04, + 0x06, 0x0C, 0x1A, 0x12, 0x07, 0x02, 0x12, 0x1F, 0x00, + 0x06, 0x1B, 0x1B, 0x0E, 0x1F, 0x04, 0x1F, 0x04, 0x04, + 0x06, 0x07, 0x09, 0x09, 0x07, 0x09, 0x1D, 0x09, 0x09, + 0x06, 0x18, 0x14, 0x04, 0x0E, 0x04, 0x04, 0x05, 0x03, + 0x06, 0x18, 0x00, 0x06, 0x08, 0x0E, 0x09, 0x1E, 0x00, + 0x06, 0x18, 0x00, 0x0C, 0x08, 0x08, 0x08, 0x1C, 0x00, + 0x06, 0x00, 0x18, 0x00, 0x0E, 0x11, 0x11, 0x0E, 0x00, + 0x06, 0x00, 0x18, 0x00, 0x11, 0x11, 0x19, 0x16, 0x00, + 0x06, 0x00, 0x1E, 0x00, 0x0E, 0x12, 0x12, 0x12, 0x00, + 0x06, 0x1F, 0x00, 0x13, 0x17, 0x1D, 0x19, 0x11, 0x00, + 0x06, 0x0E, 0x09, 0x09, 0x1E, 0x00, 0x1F, 0x00, 0x00, + 0x06, 0x0E, 0x11, 0x11, 0x0E, 0x00, 0x1F, 0x00, 0x00, + 0x06, 0x04, 0x00, 0x04, 0x06, 0x01, 0x11, 0x0E, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x1F, 0x01, 0x01, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x1F, 0x10, 0x10, 0x00, 0x00, + 0x06, 0x01, 0x11, 0x09, 0x1D, 0x12, 0x19, 0x04, 0x1C, + 0x06, 0x01, 0x11, 0x09, 0x15, 0x1A, 0x1D, 0x10, 0x10, + 0x06, 0x04, 0x04, 0x00, 0x04, 0x04, 0x04, 0x04, 0x00, + 0x06, 0x00, 0x14, 0x0A, 0x05, 0x0A, 0x14, 0x00, 0x00, + 0x06, 0x00, 0x05, 0x0A, 0x14, 0x0A, 0x05, 0x00, 0x00, + 0x06, 0x04, 0x11, 0x04, 0x11, 0x04, 0x11, 0x04, 0x11, + 0x06, 0x0A, 0x15, 0x0A, 0x15, 0x0A, 0x15, 0x0A, 0x15, + 0x06, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, + 0x06, 0x08, 0x08, 0x08, 0x08, 0x0F, 0x08, 0x08, 0x08, + 0x06, 0x08, 0x08, 0x0F, 0x08, 0x0F, 0x08, 0x08, 0x08, + 0x06, 0x14, 0x14, 0x14, 0x14, 0x17, 0x14, 0x14, 0x14, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x14, 0x14, + 0x06, 0x00, 0x00, 0x0F, 0x08, 0x0F, 0x08, 0x08, 0x08, + 0x06, 0x14, 0x14, 0x17, 0x10, 0x17, 0x14, 0x14, 0x14, + 0x06, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x06, 0x00, 0x00, 0x1F, 0x10, 0x17, 0x14, 0x14, 0x14, + 0x06, 0x14, 0x14, 0x17, 0x10, 0x1F, 0x00, 0x00, 0x00, + 0x06, 0x14, 0x14, 0x14, 0x14, 0x1F, 0x00, 0x00, 0x00, + 0x06, 0x08, 0x08, 0x0F, 0x08, 0x0F, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x08, 0x08, 0x08, + 0x06, 0x08, 0x08, 0x08, 0x08, 0x18, 0x00, 0x00, 0x00, + 0x06, 0x08, 0x08, 0x08, 0x08, 0x1F, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x08, 0x08, 0x08, + 0x06, 0x08, 0x08, 0x08, 0x08, 0x18, 0x08, 0x08, 0x08, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x06, 0x08, 0x08, 0x08, 0x08, 0x1F, 0x08, 0x08, 0x08, + 0x06, 0x08, 0x08, 0x18, 0x08, 0x18, 0x08, 0x08, 0x08, + 0x06, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, + 0x06, 0x14, 0x14, 0x14, 0x04, 0x1C, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x1C, 0x04, 0x14, 0x14, 0x14, 0x14, + 0x06, 0x14, 0x14, 0x17, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x1F, 0x00, 0x17, 0x14, 0x14, 0x14, + 0x06, 0x14, 0x14, 0x14, 0x04, 0x14, 0x14, 0x14, 0x14, + 0x06, 0x00, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x06, 0x14, 0x14, 0x17, 0x00, 0x17, 0x14, 0x14, 0x14, + 0x06, 0x08, 0x08, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0x00, + 0x06, 0x14, 0x14, 0x14, 0x14, 0x1F, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x1F, 0x00, 0x1F, 0x08, 0x08, 0x08, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x14, 0x14, + 0x06, 0x14, 0x14, 0x14, 0x14, 0x1C, 0x00, 0x00, 0x00, + 0x06, 0x08, 0x08, 0x18, 0x08, 0x18, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x18, 0x08, 0x18, 0x08, 0x08, 0x08, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x14, 0x14, 0x14, + 0x06, 0x14, 0x14, 0x14, 0x14, 0x1F, 0x14, 0x14, 0x14, + 0x06, 0x08, 0x08, 0x1F, 0x08, 0x1F, 0x08, 0x08, 0x08, + 0x06, 0x08, 0x08, 0x08, 0x08, 0x0F, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x08, 0x08, + 0x06, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x1F, 0x1F, + 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, + 0x06, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, + 0x06, 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x16, 0x09, 0x09, 0x09, 0x16, 0x00, + 0x06, 0x00, 0x0E, 0x19, 0x0F, 0x19, 0x0F, 0x01, 0x00, + 0x06, 0x00, 0x1F, 0x19, 0x01, 0x01, 0x01, 0x01, 0x00, + 0x06, 0x00, 0x1F, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, + 0x06, 0x1F, 0x11, 0x02, 0x04, 0x02, 0x11, 0x1F, 0x00, + 0x06, 0x00, 0x00, 0x1E, 0x09, 0x09, 0x09, 0x06, 0x00, + 0x06, 0x00, 0x0A, 0x0A, 0x0A, 0x0A, 0x16, 0x03, 0x00, + 0x06, 0x00, 0x1F, 0x05, 0x04, 0x04, 0x04, 0x04, 0x00, + 0x06, 0x1F, 0x04, 0x0E, 0x11, 0x11, 0x0E, 0x04, 0x1F, + 0x06, 0x04, 0x0A, 0x11, 0x1F, 0x11, 0x0A, 0x04, 0x00, + 0x06, 0x04, 0x0A, 0x11, 0x11, 0x0A, 0x0A, 0x1B, 0x00, + 0x06, 0x0C, 0x02, 0x0C, 0x0E, 0x11, 0x11, 0x0E, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x0E, 0x15, 0x15, 0x0E, 0x00, + 0x06, 0x10, 0x0E, 0x19, 0x15, 0x15, 0x13, 0x0E, 0x01, + 0x06, 0x0E, 0x01, 0x01, 0x0F, 0x01, 0x01, 0x0E, 0x00, + 0x06, 0x0E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, + 0x06, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00, + 0x06, 0x04, 0x04, 0x1F, 0x04, 0x04, 0x00, 0x1F, 0x00, + 0x06, 0x02, 0x04, 0x08, 0x04, 0x02, 0x00, 0x1F, 0x00, + 0x06, 0x08, 0x04, 0x02, 0x04, 0x08, 0x00, 0x1F, 0x00, + 0x06, 0x1C, 0x14, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, + 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x07, + 0x06, 0x0C, 0x0C, 0x00, 0x1F, 0x00, 0x0C, 0x0C, 0x00, + 0x06, 0x00, 0x17, 0x1D, 0x00, 0x17, 0x1D, 0x00, 0x00, + 0x06, 0x0E, 0x1B, 0x1B, 0x0E, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x06, 0x1C, 0x04, 0x04, 0x04, 0x05, 0x05, 0x06, 0x04, + 0x06, 0x0E, 0x12, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, + 0x06, 0x0E, 0x18, 0x0C, 0x06, 0x1E, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x1E, 0x1E, 0x1E, 0x1E, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + diff --git a/sys/include/fonts/topaz.h b/sys/include/fonts/topaz.h new file mode 100644 index 0000000..c2f576c --- /dev/null +++ b/sys/include/fonts/topaz.h @@ -0,0 +1,2307 @@ +const unsigned char Topaz[] = { + 0x08, 0x01, 0x00, 0xFF, 1, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b01111110, + 0b10000001, + 0b10100101, + 0b10000001, + 0b10111101, + 0b10011001, + 0b10000001, + 0b01111110, + 0x08, + 0b01111110, + 0b11111111, + 0b11011011, + 0b11111111, + 0b11000011, + 0b11100111, + 0b11111111, + 0b01111110, + 0x08, + 0b00110110, + 0b01111111, + 0b01111111, + 0b01111111, + 0b00111110, + 0b00011100, + 0b00001000, + 0b00000000, + 0x08, + 0b00001000, + 0b00011100, + 0b00111110, + 0b01111111, + 0b00111110, + 0b00011100, + 0b00001000, + 0b00000000, + 0x08, + 0b00011100, + 0b00111110, + 0b00011100, + 0b01111111, + 0b01111111, + 0b01101011, + 0b00001000, + 0b00011100, + 0x08, + 0b00001000, + 0b00001000, + 0b00011100, + 0b00111110, + 0b01111111, + 0b00111110, + 0b00001000, + 0b00011100, + 0x08, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00111100, + 0b00111100, + 0b00011000, + 0b00000000, + 0b00000000, + 0x08, + 0b11111111, + 0b11111111, + 0b11100111, + 0b11000011, + 0b11000011, + 0b11100111, + 0b11111111, + 0b11111111, + 0x08, + 0b00000000, + 0b00111100, + 0b01100110, + 0b01000010, + 0b01000010, + 0b01100110, + 0b00111100, + 0b00000000, + 0x08, + 0b11111111, + 0b11000011, + 0b10011001, + 0b10111101, + 0b10111101, + 0b10011001, + 0b11000011, + 0b11111111, + 0x08, + 0b11110000, + 0b11100000, + 0b11110000, + 0b10111110, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00011110, + 0x08, + 0b00111100, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00111100, + 0b00011000, + 0b01111110, + 0b00011000, + 0x08, + 0b11111100, + 0b11001100, + 0b11111100, + 0b00001100, + 0b00001100, + 0b00001110, + 0b00001111, + 0b00000111, + 0x08, + 0b11111110, + 0b11000110, + 0b11111110, + 0b11000110, + 0b11000110, + 0b11100110, + 0b01100111, + 0b00000011, + 0x08, + 0b10011001, + 0b01011010, + 0b00111100, + 0b11100111, + 0b11100111, + 0b00111100, + 0b01011010, + 0b10011001, + 0x08, + 0b00000001, + 0b00000111, + 0b00011111, + 0b01111111, + 0b00011111, + 0b00000111, + 0b00000001, + 0b00000000, + 0x08, + 0b01000000, + 0b01110000, + 0b01111100, + 0b01111111, + 0b01111100, + 0b01110000, + 0b01000000, + 0b00000000, + 0x08, + 0b00011000, + 0b00111100, + 0b01111110, + 0b00011000, + 0b00011000, + 0b01111110, + 0b00111100, + 0b00011000, + 0x08, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00000000, + 0b01100110, + 0b00000000, + 0x08, + 0b11111110, + 0b11011011, + 0b11011011, + 0b11011110, + 0b11011000, + 0b11011000, + 0b11011000, + 0b00000000, + 0x08, + 0b01111110, + 0b11000011, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00110001, + 0b00011111, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01111110, + 0b01111110, + 0b01111110, + 0b00000000, + 0x08, + 0b00011000, + 0b00111100, + 0b01111110, + 0b00011000, + 0b01111110, + 0b00111100, + 0b00011000, + 0b11111111, + 0x08, + 0b00011000, + 0b00111100, + 0b01111110, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00000000, + 0x08, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b01111110, + 0b00111100, + 0b00011000, + 0b00000000, + 0x08, + 0b00000000, + 0b00011000, + 0b00110000, + 0b01111111, + 0b00110000, + 0b00011000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00001100, + 0b00000110, + 0b01111111, + 0b00000110, + 0b00001100, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000011, + 0b00000011, + 0b00000011, + 0b01111111, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00100100, + 0b01100110, + 0b11111111, + 0b01100110, + 0b00100100, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00011000, + 0b00111100, + 0b01111110, + 0b11111111, + 0b11111111, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b11111111, + 0b11111111, + 0b01111110, + 0b00111100, + 0b00011000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00001100, + 0b00011110, + 0b00011110, + 0b00001100, + 0b00001100, + 0b00000000, + 0b00001100, + 0b00000000, + 0x08, + 0b00110110, + 0b00110110, + 0b00110110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00110110, + 0b00110110, + 0b01111111, + 0b00110110, + 0b01111111, + 0b00110110, + 0b00110110, + 0b00000000, + 0x08, + 0b00001100, + 0b00111110, + 0b00000011, + 0b00011110, + 0b00110000, + 0b00011111, + 0b00001100, + 0b00000000, + 0x08, + 0b00000000, + 0b01100011, + 0b00110011, + 0b00011000, + 0b00001100, + 0b01100110, + 0b01100011, + 0b00000000, + 0x08, + 0b00011100, + 0b00110110, + 0b00011100, + 0b01101110, + 0b00111011, + 0b00110011, + 0b01101110, + 0b00000000, + 0x08, + 0b00000110, + 0b00000110, + 0b00000011, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00011000, + 0b00001100, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00001100, + 0b00011000, + 0b00000000, + 0x08, + 0b00000110, + 0b00001100, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00001100, + 0b00000110, + 0b00000000, + 0x08, + 0b00000000, + 0b01100110, + 0b00111100, + 0b11111111, + 0b00111100, + 0b01100110, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00001100, + 0b00001100, + 0b00111111, + 0b00001100, + 0b00001100, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00001110, + 0b00001100, + 0b00000110, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00001100, + 0b00001100, + 0b00000000, + 0x08, + 0b01100000, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00000110, + 0b00000011, + 0b00000001, + 0b00000000, + 0x08, + 0b00011110, + 0b00110011, + 0b00111011, + 0b00111111, + 0b00110111, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00001100, + 0b00001111, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00111111, + 0b00000000, + 0x08, + 0b00011110, + 0b00110011, + 0b00110000, + 0b00011100, + 0b00000110, + 0b00110011, + 0b00111111, + 0b00000000, + 0x08, + 0b00011110, + 0b00110011, + 0b00110000, + 0b00011100, + 0b00110000, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00111000, + 0b00111100, + 0b00110110, + 0b00110011, + 0b01111111, + 0b00110000, + 0b00110000, + 0b00000000, + 0x08, + 0b00111111, + 0b00000011, + 0b00011111, + 0b00110000, + 0b00110000, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00011100, + 0b00000110, + 0b00000011, + 0b00011111, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00111111, + 0b00110011, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00000110, + 0b00000110, + 0b00000000, + 0x08, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00111110, + 0b00110000, + 0b00011000, + 0b00001110, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00001100, + 0b00001100, + 0b00000000, + 0b00001100, + 0b00001100, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00001100, + 0b00001100, + 0b00000000, + 0b00001110, + 0b00001100, + 0b00000110, + 0x08, + 0b00011000, + 0b00001100, + 0b00000110, + 0b00000011, + 0b00000110, + 0b00001100, + 0b00011000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00111111, + 0b00000000, + 0b00111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000110, + 0b00001100, + 0b00011000, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00000110, + 0b00000000, + 0x08, + 0b00011110, + 0b00110011, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00000000, + 0b00001100, + 0b00000000, + 0x08, + 0b00111110, + 0b01100011, + 0b01111011, + 0b01111011, + 0b01111011, + 0b00000011, + 0b00011110, + 0b00000000, + 0x08, + 0b00001100, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00111111, + 0b00110011, + 0b00110011, + 0b00000000, + 0x08, + 0b00111111, + 0b01100110, + 0b01100110, + 0b00111110, + 0b01100110, + 0b01100110, + 0b00111111, + 0b00000000, + 0x08, + 0b00111100, + 0b01100110, + 0b00000011, + 0b00000011, + 0b00000011, + 0b01100110, + 0b00111100, + 0b00000000, + 0x08, + 0b00111111, + 0b00110110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00110110, + 0b00111111, + 0b00000000, + 0x08, + 0b01111111, + 0b01000110, + 0b00010110, + 0b00011110, + 0b00010110, + 0b01000110, + 0b01111111, + 0b00000000, + 0x08, + 0b01111111, + 0b01000110, + 0b00010110, + 0b00011110, + 0b00010110, + 0b00000110, + 0b00001111, + 0b00000000, + 0x08, + 0b00111100, + 0b01100110, + 0b00000011, + 0b00000011, + 0b01110011, + 0b01100110, + 0b01111100, + 0b00000000, + 0x08, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00111111, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00000000, + 0x08, + 0b00011110, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00011110, + 0b00000000, + 0x08, + 0b01111000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b01100111, + 0b01100110, + 0b00110110, + 0b00011110, + 0b00110110, + 0b01100110, + 0b01100111, + 0b00000000, + 0x08, + 0b00001111, + 0b00000110, + 0b00000110, + 0b00000110, + 0b01000110, + 0b01100110, + 0b01111111, + 0b00000000, + 0x08, + 0b01100011, + 0b01110111, + 0b01111111, + 0b01101011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00000000, + 0x08, + 0b01100011, + 0b01100111, + 0b01101111, + 0b01111011, + 0b01110011, + 0b01100011, + 0b01100011, + 0b00000000, + 0x08, + 0b00011100, + 0b00110110, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00110110, + 0b00011100, + 0b00000000, + 0x08, + 0b00111111, + 0b01100110, + 0b01100110, + 0b00111110, + 0b00000110, + 0b00000110, + 0b00001111, + 0b00000000, + 0x08, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00111011, + 0b00011110, + 0b00111000, + 0b00000000, + 0x08, + 0b00111111, + 0b01100110, + 0b01100110, + 0b00111110, + 0b00011110, + 0b00110110, + 0b01100111, + 0b00000000, + 0x08, + 0b00011110, + 0b00110011, + 0b00000111, + 0b00011100, + 0b00111000, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00111111, + 0b00101101, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00011110, + 0b00000000, + 0x08, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00111111, + 0b00000000, + 0x08, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00001100, + 0b00000000, + 0x08, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01101011, + 0b01111111, + 0b01110111, + 0b01100011, + 0b00000000, + 0x08, + 0b01100011, + 0b01100011, + 0b00110110, + 0b00011100, + 0b00110110, + 0b01100011, + 0b01100011, + 0b00000000, + 0x08, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00001100, + 0b00001100, + 0b00011110, + 0b00000000, + 0x08, + 0b01111111, + 0b00110011, + 0b00011001, + 0b00001100, + 0b01000110, + 0b01100011, + 0b01111111, + 0b00000000, + 0x08, + 0b00011110, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00011110, + 0b00000000, + 0x08, + 0b00000011, + 0b00000110, + 0b00001100, + 0b00011000, + 0b00110000, + 0b01100000, + 0b01000000, + 0b00000000, + 0x08, + 0b00011110, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011110, + 0b00000000, + 0x08, + 0b00001000, + 0b00011100, + 0b00110110, + 0b01100011, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b11111111, + 0x08, + 0b00001100, + 0b00001100, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00011110, + 0b00110000, + 0b00111110, + 0b00110011, + 0b01101110, + 0b00000000, + 0x08, + 0b00000111, + 0b00000110, + 0b00111110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00111101, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00011110, + 0b00110011, + 0b00000011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00111000, + 0b00110000, + 0b00110000, + 0b00111110, + 0b00110011, + 0b00110011, + 0b01101110, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00011110, + 0b00110011, + 0b00111111, + 0b00000011, + 0b00011110, + 0b00000000, + 0x08, + 0b00011100, + 0b00110110, + 0b00000110, + 0b00001111, + 0b00000110, + 0b00000110, + 0b00001111, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b01101110, + 0b00110011, + 0b00110011, + 0b00111110, + 0b00110000, + 0b00011111, + 0x08, + 0b00000111, + 0b00000110, + 0b00110110, + 0b01101110, + 0b01100110, + 0b01100110, + 0b01100111, + 0b00000000, + 0x08, + 0b00001100, + 0b00000000, + 0b00001110, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00011110, + 0b00000000, + 0x08, + 0b00011000, + 0b00000000, + 0b00011110, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011011, + 0b00001110, + 0x08, + 0b00000111, + 0b00000110, + 0b01100110, + 0b00110110, + 0b00011110, + 0b00110110, + 0b01100111, + 0b00000000, + 0x08, + 0b00001110, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00011110, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00110111, + 0b01111111, + 0b01101011, + 0b01100011, + 0b01100011, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00011111, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00111011, + 0b01100110, + 0b01100110, + 0b00111110, + 0b00000110, + 0b00001111, + 0x08, + 0b00000000, + 0b00000000, + 0b01101110, + 0b00110011, + 0b00110011, + 0b00111110, + 0b00110000, + 0b01111000, + 0x08, + 0b00000000, + 0b00000000, + 0b00011011, + 0b00110110, + 0b00110110, + 0b00000110, + 0b00001111, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00111110, + 0b00000011, + 0b00011110, + 0b00110000, + 0b00011111, + 0b00000000, + 0x08, + 0b00001000, + 0b00001100, + 0b00111110, + 0b00001100, + 0b00001100, + 0b00101100, + 0b00011000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b01101110, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00001100, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b01100011, + 0b01100011, + 0b01101011, + 0b01111111, + 0b00110110, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b01100011, + 0b00110110, + 0b00011100, + 0b00110110, + 0b01100011, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00111110, + 0b00110000, + 0b00011111, + 0x08, + 0b00000000, + 0b00000000, + 0b00111111, + 0b00011001, + 0b00001100, + 0b00100110, + 0b00111111, + 0b00000000, + 0x08, + 0b00111000, + 0b00001100, + 0b00001100, + 0b00000111, + 0b00001100, + 0b00001100, + 0b00111000, + 0b00000000, + 0x08, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00000000, + 0x08, + 0b00000111, + 0b00001100, + 0b00001100, + 0b00111000, + 0b00001100, + 0b00001100, + 0b00000111, + 0b00000000, + 0x08, + 0b01101110, + 0b00111011, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00001000, + 0b00011100, + 0b00110110, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01111111, + 0b00000000, + 0x08, + 0b00011110, + 0b00110011, + 0b00000011, + 0b00110011, + 0b00011110, + 0b00011000, + 0b00110000, + 0b00011110, + 0x08, + 0b00000000, + 0b00110011, + 0b00000000, + 0b00110011, + 0b00110011, + 0b00110011, + 0b01111110, + 0b00000000, + 0x08, + 0b00111000, + 0b00000000, + 0b00011110, + 0b00110011, + 0b00111111, + 0b00000011, + 0b00011110, + 0b00000000, + 0x08, + 0b01111110, + 0b11000011, + 0b00111100, + 0b01100000, + 0b01111100, + 0b01100110, + 0b11111100, + 0b00000000, + 0x08, + 0b00110011, + 0b00000000, + 0b00011110, + 0b00110000, + 0b00111110, + 0b00110011, + 0b01111110, + 0b00000000, + 0x08, + 0b00000111, + 0b00000000, + 0b00011110, + 0b00110000, + 0b00111110, + 0b00110011, + 0b01111110, + 0b00000000, + 0x08, + 0b00001100, + 0b00001100, + 0b00011110, + 0b00110000, + 0b00111110, + 0b00110011, + 0b01111110, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00111110, + 0b00000011, + 0b00000011, + 0b00111110, + 0b01100000, + 0b00111100, + 0x08, + 0b01111110, + 0b11000011, + 0b00111100, + 0b01100110, + 0b01111110, + 0b00000110, + 0b00111100, + 0b00000000, + 0x08, + 0b00110011, + 0b00000000, + 0b00011110, + 0b00110011, + 0b00111111, + 0b00000011, + 0b00011110, + 0b00000000, + 0x08, + 0b00000111, + 0b00000000, + 0b00011110, + 0b00110011, + 0b00111111, + 0b00000011, + 0b00011110, + 0b00000000, + 0x08, + 0b00110011, + 0b00000000, + 0b00001110, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00011110, + 0b00000000, + 0x08, + 0b00111110, + 0b01100011, + 0b00011100, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00111100, + 0b00000000, + 0x08, + 0b00000111, + 0b00000000, + 0b00001110, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00011110, + 0b00000000, + 0x08, + 0b00110011, + 0b00001100, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00111111, + 0b00110011, + 0b00000000, + 0x08, + 0b00001100, + 0b00001100, + 0b00000000, + 0b00011110, + 0b00110011, + 0b00111111, + 0b00110011, + 0b00000000, + 0x08, + 0b00111000, + 0b00000000, + 0b00111111, + 0b00000110, + 0b00011110, + 0b00000110, + 0b00111111, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b11111110, + 0b00110000, + 0b11111110, + 0b00110011, + 0b11111110, + 0b00000000, + 0x08, + 0b01111100, + 0b00110110, + 0b00110011, + 0b01111111, + 0b00110011, + 0b00110011, + 0b01110011, + 0b00000000, + 0x08, + 0b00011110, + 0b00110011, + 0b00000000, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00000000, + 0b00110011, + 0b00000000, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00000000, + 0b00000111, + 0b00000000, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00011110, + 0b00110011, + 0b00000000, + 0b00110011, + 0b00110011, + 0b00110011, + 0b01111110, + 0b00000000, + 0x08, + 0b00000000, + 0b00000111, + 0b00000000, + 0b00110011, + 0b00110011, + 0b00110011, + 0b01111110, + 0b00000000, + 0x08, + 0b00000000, + 0b00110011, + 0b00000000, + 0b00110011, + 0b00110011, + 0b00111111, + 0b00110000, + 0b00011111, + 0x08, + 0b01100011, + 0b00011100, + 0b00111110, + 0b01100011, + 0b01100011, + 0b00111110, + 0b00011100, + 0b00000000, + 0x08, + 0b00110011, + 0b00000000, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00011000, + 0b00011000, + 0b01111110, + 0b00000011, + 0b00000011, + 0b01111110, + 0b00011000, + 0b00011000, + 0x08, + 0b00011100, + 0b00110110, + 0b00100110, + 0b00001111, + 0b00000110, + 0b01100111, + 0b00111111, + 0b00000000, + 0x08, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00111111, + 0b00001100, + 0b00111111, + 0b00001100, + 0b00000000, + 0x08, + 0b00001111, + 0b00011011, + 0b00011011, + 0b00101111, + 0b00110011, + 0b01111011, + 0b00110011, + 0b01110000, + 0x08, + 0b01110000, + 0b11011000, + 0b00011000, + 0b01111110, + 0b00011000, + 0b00011000, + 0b00011011, + 0b00001110, + 0x08, + 0b00111000, + 0b00000000, + 0b00011110, + 0b00110000, + 0b00111110, + 0b00110011, + 0b01111110, + 0b00000000, + 0x08, + 0b00011100, + 0b00000000, + 0b00001110, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00011110, + 0b00000000, + 0x08, + 0b00000000, + 0b00111000, + 0b00000000, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00000000, + 0b00111000, + 0b00000000, + 0b00110011, + 0b00110011, + 0b00110011, + 0b01111110, + 0b00000000, + 0x08, + 0b00000000, + 0b00011111, + 0b00000000, + 0b00011111, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00000000, + 0x08, + 0b00111111, + 0b00000000, + 0b00110011, + 0b00110111, + 0b00111111, + 0b00111011, + 0b00110011, + 0b00000000, + 0x08, + 0b00111100, + 0b00110110, + 0b00110110, + 0b01111100, + 0b00000000, + 0b01111110, + 0b00000000, + 0b00000000, + 0x08, + 0b00111100, + 0b01100110, + 0b01100110, + 0b00111100, + 0b00000000, + 0b01111110, + 0b00000000, + 0b00000000, + 0x08, + 0b00001100, + 0b00000000, + 0b00001100, + 0b00000110, + 0b00000011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00111111, + 0b00000011, + 0b00000011, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00111111, + 0b00110000, + 0b00110000, + 0b00000000, + 0b00000000, + 0x08, + 0b01100011, + 0b00110011, + 0b00011011, + 0b01111100, + 0b11000110, + 0b01110011, + 0b00011001, + 0b11111000, + 0x08, + 0b01100011, + 0b00110011, + 0b00011011, + 0b11001111, + 0b11100110, + 0b11110011, + 0b11111001, + 0b11000000, + 0x08, + 0b00000000, + 0b00011000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00111100, + 0b00111100, + 0b00011000, + 0x08, + 0b00000000, + 0b11001100, + 0b01100110, + 0b00110011, + 0b01100110, + 0b11001100, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00110011, + 0b01100110, + 0b11001100, + 0b01100110, + 0b00110011, + 0b00000000, + 0b00000000, + 0x08, + 0b01000100, + 0b00010001, + 0b01000100, + 0b00010001, + 0b01000100, + 0b00010001, + 0b01000100, + 0b00010001, + 0x08, + 0b10101010, + 0b01010101, + 0b10101010, + 0b01010101, + 0b10101010, + 0b01010101, + 0b10101010, + 0b01010101, + 0x08, + 0b00111011, + 0b01101110, + 0b00111011, + 0b01101110, + 0b00111011, + 0b01101110, + 0b00111011, + 0b01101110, + 0x08, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011111, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b00011000, + 0b00011000, + 0b00011111, + 0b00011000, + 0b00011111, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01101111, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01111111, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b00000000, + 0b00000000, + 0b00011111, + 0b00011000, + 0b00011111, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b01101100, + 0b01101100, + 0b01101111, + 0b01100000, + 0b01101111, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b00000000, + 0b00000000, + 0b01111111, + 0b01100000, + 0b01101111, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b01101100, + 0b01101100, + 0b01101111, + 0b01100000, + 0b01111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00011000, + 0b00011000, + 0b00011111, + 0b00011000, + 0b00011111, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00011111, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b11111000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b11111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b11111111, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b11111000, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b11111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b11111111, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b00011000, + 0b00011000, + 0b11111000, + 0b00011000, + 0b11111000, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0b11101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b01101100, + 0b01101100, + 0b11101100, + 0b00001100, + 0b11111100, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b11111100, + 0b00001100, + 0b11101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b01101100, + 0b01101100, + 0b11101111, + 0b00000000, + 0b11111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b11111111, + 0b00000000, + 0b11101111, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b01101100, + 0b01101100, + 0b11101100, + 0b00001100, + 0b11101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b00000000, + 0b00000000, + 0b11111111, + 0b00000000, + 0b11111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b01101100, + 0b01101100, + 0b11101111, + 0b00000000, + 0b11101111, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b00011000, + 0b00011000, + 0b11111111, + 0b00000000, + 0b11111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0b11111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b11111111, + 0b00000000, + 0b11111111, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b11111111, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0b11111100, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00011000, + 0b00011000, + 0b11111000, + 0b00011000, + 0b11111000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b11111000, + 0b00011000, + 0b11111000, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b11111100, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b01101100, + 0b01101100, + 0b01101100, + 0b01101100, + 0b11101111, + 0b01101100, + 0b01101100, + 0b01101100, + 0x08, + 0b00011000, + 0b00011000, + 0b11111111, + 0b00000000, + 0b11111111, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011111, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b11111000, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b11111111, + 0b11111111, + 0b11111111, + 0b11111111, + 0b11111111, + 0b11111111, + 0b11111111, + 0b11111111, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b11111111, + 0b11111111, + 0b11111111, + 0b11111111, + 0x08, + 0b00001111, + 0b00001111, + 0b00001111, + 0b00001111, + 0b00001111, + 0b00001111, + 0b00001111, + 0b00001111, + 0x08, + 0b11110000, + 0b11110000, + 0b11110000, + 0b11110000, + 0b11110000, + 0b11110000, + 0b11110000, + 0b11110000, + 0x08, + 0b11111111, + 0b11111111, + 0b11111111, + 0b11111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b01101110, + 0b00111011, + 0b00010011, + 0b00111011, + 0b01101110, + 0b00000000, + 0x08, + 0b00000000, + 0b00011110, + 0b00110011, + 0b00011111, + 0b00110011, + 0b00011111, + 0b00000011, + 0b00000011, + 0x08, + 0b00000000, + 0b01111111, + 0b01100011, + 0b00000011, + 0b00000011, + 0b00000011, + 0b00000011, + 0b00000000, + 0x08, + 0b00000000, + 0b01111111, + 0b00110110, + 0b00110110, + 0b00110110, + 0b00110110, + 0b00110110, + 0b00000000, + 0x08, + 0b01111111, + 0b01100110, + 0b00001100, + 0b00011000, + 0b00001100, + 0b01100110, + 0b01111111, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b01111110, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00000000, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00111110, + 0b00000110, + 0b00000011, + 0x08, + 0b00000000, + 0b01101110, + 0b00111011, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00000000, + 0x08, + 0b00111111, + 0b00001100, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00001100, + 0b00111111, + 0x08, + 0b00011100, + 0b00110110, + 0b01100011, + 0b01111111, + 0b01100011, + 0b00110110, + 0b00011100, + 0b00000000, + 0x08, + 0b00011100, + 0b00110110, + 0b01100011, + 0b01100011, + 0b00110110, + 0b00110110, + 0b01110111, + 0b00000000, + 0x08, + 0b00111000, + 0b00001100, + 0b00011000, + 0b00111110, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b01111110, + 0b11011011, + 0b11011011, + 0b01111110, + 0b00000000, + 0b00000000, + 0x08, + 0b01100000, + 0b00110000, + 0b01111110, + 0b11011011, + 0b11011011, + 0b01111110, + 0b00000110, + 0b00000011, + 0x08, + 0b00111100, + 0b00000110, + 0b00000011, + 0b00111111, + 0b00000011, + 0b00000110, + 0b00111100, + 0b00000000, + 0x08, + 0b00011110, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00000000, + 0x08, + 0b00000000, + 0b00111111, + 0b00000000, + 0b00111111, + 0b00000000, + 0b00111111, + 0b00000000, + 0b00000000, + 0x08, + 0b00001100, + 0b00001100, + 0b00111111, + 0b00001100, + 0b00001100, + 0b00000000, + 0b00111111, + 0b00000000, + 0x08, + 0b00000110, + 0b00001100, + 0b00011000, + 0b00001100, + 0b00000110, + 0b00000000, + 0b00111111, + 0b00000000, + 0x08, + 0b00011000, + 0b00001100, + 0b00000110, + 0b00001100, + 0b00011000, + 0b00000000, + 0b00111111, + 0b00000000, + 0x08, + 0b01110000, + 0b11011000, + 0b11011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0x08, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011011, + 0b00011011, + 0b00001110, + 0x08, + 0b00001100, + 0b00001100, + 0b00000000, + 0b00111111, + 0b00000000, + 0b00001100, + 0b00001100, + 0b00000000, + 0x08, + 0b00000000, + 0b01001110, + 0b00111001, + 0b00000000, + 0b01001110, + 0b00111001, + 0b00000000, + 0b00000000, + 0x08, + 0b00011100, + 0b00110110, + 0b00110110, + 0b00011100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b11110000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110111, + 0b00110110, + 0b00111100, + 0b00111000, + 0x08, + 0b00011110, + 0b00110110, + 0b00110110, + 0b00110110, + 0b00110110, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00011110, + 0b00110000, + 0b00011100, + 0b00000110, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00111100, + 0b00111100, + 0b00111100, + 0b00111100, + 0b00000000, + 0b00000000, + 0x08, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +}; diff --git a/sys/include/fonts/vga.h b/sys/include/fonts/vga.h new file mode 100644 index 0000000..afa0a10 --- /dev/null +++ b/sys/include/fonts/vga.h @@ -0,0 +1,1833 @@ +static const unsigned char vga[] = { + + 16, // lpc + 1, // bpl + 32, // start + 0x7f, // end + 1, // bpp + +// 32 $20 'space' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 33 $21 'exclam' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00111100, + 0b00111100, + 0b00111100, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 34 $22 'quotedbl' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00100100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 35 $23 'numbersign' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00110110, + 0b00110110, + 0b01111111, + 0b00110110, + 0b00110110, + 0b00110110, + 0b01111111, + 0b00110110, + 0b00110110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 36 $24 'dollar' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00011000, + 0b00011000, + 0b00111110, + 0b01100011, + 0b01000011, + 0b00000011, + 0b00111110, + 0b01100000, + 0b01100000, + 0b01100001, + 0b01100011, + 0b00111110, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00000000, +// 37 $25 'percent' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01000011, + 0b01100011, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00000110, + 0b01100011, + 0b01100001, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 38 $26 'ampersand' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00011100, + 0b00110110, + 0b00110110, + 0b00011100, + 0b01101110, + 0b00111011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b01101110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 39 $27 'quotesingle' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00000100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 40 $28 'parenleft' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00011000, + 0b00110000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 41 $29 'parenright' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00001100, + 0b00011000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 42 $2a 'asterisk' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01100110, + 0b00111100, + 0b11111111, + 0b00111100, + 0b01100110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 43 $2b 'plus' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b01111110, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 44 $2c 'comma' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00001100, + 0b00000000, + 0b00000000, + 0b00000000, +// 45 $2d 'hyphen' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 46 $2e 'period' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 47 $2f 'slash' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01000000, + 0b01100000, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00000110, + 0b00000011, + 0b00000001, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 48 $30 'zero' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00011100, + 0b00110110, + 0b01100011, + 0b01100011, + 0b01101011, + 0b01101011, + 0b01100011, + 0b01100011, + 0b00110110, + 0b00011100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 49 $31 'one' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00011100, + 0b00011110, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b01111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 50 $32 'two' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b01100000, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00000110, + 0b00000011, + 0b01100011, + 0b01111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 51 $33 'three' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b01100000, + 0b01100000, + 0b00111100, + 0b01100000, + 0b01100000, + 0b01100000, + 0b01100011, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 52 $34 'four' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00110000, + 0b00111000, + 0b00111100, + 0b00110110, + 0b00110011, + 0b01111111, + 0b00110000, + 0b00110000, + 0b00110000, + 0b01111000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 53 $35 'five' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01111111, + 0b00000011, + 0b00000011, + 0b00000011, + 0b00111111, + 0b01100000, + 0b01100000, + 0b01100000, + 0b01100011, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 54 $36 'six' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00011100, + 0b00000110, + 0b00000011, + 0b00000011, + 0b00111111, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 55 $37 'seven' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01111111, + 0b01100011, + 0b01100000, + 0b01100000, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 56 $38 'eight' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00111110, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 57 $39 'nine' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01111110, + 0b01100000, + 0b01100000, + 0b01100000, + 0b00110000, + 0b00011110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 58 $3a 'colon' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 59 $3b 'semicolon' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00001100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 60 $3c 'less' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01100000, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00000110, + 0b00001100, + 0b00011000, + 0b00110000, + 0b01100000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 61 $3d 'equal' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01111110, + 0b00000000, + 0b00000000, + 0b01111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 62 $3e 'greater' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000110, + 0b00001100, + 0b00011000, + 0b00110000, + 0b01100000, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00000110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 63 $3f 'question' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b01100011, + 0b00110000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 64 $40 'at' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b01100011, + 0b01111011, + 0b01111011, + 0b01111011, + 0b00111011, + 0b00000011, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 65 $41 'A' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00001000, + 0b00011100, + 0b00110110, + 0b01100011, + 0b01100011, + 0b01111111, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 66 $42 'B' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111111, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00111110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 67 $43 'C' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111100, + 0b01100110, + 0b01000011, + 0b00000011, + 0b00000011, + 0b00000011, + 0b00000011, + 0b01000011, + 0b01100110, + 0b00111100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 68 $44 'D' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00011111, + 0b00110110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00110110, + 0b00011111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 69 $45 'E' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01111111, + 0b01100110, + 0b01000110, + 0b00010110, + 0b00011110, + 0b00010110, + 0b00000110, + 0b01000110, + 0b01100110, + 0b01111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 70 $46 'F' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01111111, + 0b01100110, + 0b01000110, + 0b00010110, + 0b00011110, + 0b00010110, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00001111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 71 $47 'G' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111100, + 0b01100110, + 0b01000011, + 0b00000011, + 0b00000011, + 0b01111011, + 0b01100011, + 0b01100011, + 0b01100110, + 0b01011100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 72 $48 'H' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01111111, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 73 $49 'I' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111100, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00111100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 74 $4a 'J' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01111000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00011110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 75 $4b 'K' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01100111, + 0b01100110, + 0b01100110, + 0b00110110, + 0b00011110, + 0b00011110, + 0b00110110, + 0b01100110, + 0b01100110, + 0b01100111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 76 $4c 'L' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00001111, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00000110, + 0b01000110, + 0b01100110, + 0b01111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 77 $4d 'M' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01100011, + 0b01110111, + 0b01111111, + 0b01111111, + 0b01101011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 78 $4e 'N' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01100011, + 0b01100111, + 0b01101111, + 0b01111111, + 0b01111011, + 0b01110011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 79 $4f 'O' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 80 $50 'P' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111111, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00111110, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00001111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 81 $51 'Q' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01101011, + 0b01111011, + 0b00111110, + 0b00110000, + 0b01110000, + 0b00000000, + 0b00000000, +// 82 $52 'R' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111111, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00111110, + 0b00110110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 83 $53 'S' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b01100011, + 0b00000110, + 0b00011100, + 0b00110000, + 0b01100000, + 0b01100011, + 0b01100011, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 84 $54 'T' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01111110, + 0b01111110, + 0b01011010, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00111100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 85 $55 'U' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 86 $56 'V' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00110110, + 0b00011100, + 0b00001000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 87 $57 'W' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01101011, + 0b01101011, + 0b01101011, + 0b01111111, + 0b01110111, + 0b00110110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 88 $58 '1' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01100011, + 0b01100011, + 0b00110110, + 0b00111110, + 0b00011100, + 0b00011100, + 0b00111110, + 0b00110110, + 0b01100011, + 0b01100011, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 89 $59 'Y' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00111100, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00111100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 90 $5a 'Z' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01111111, + 0b01100011, + 0b01100001, + 0b00110000, + 0b00011000, + 0b00001100, + 0b00000110, + 0b01000011, + 0b01100011, + 0b01111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 91 $5b 'bracketleft' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00111100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 92 $5c 'backslash' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000001, + 0b00000011, + 0b00000111, + 0b00001110, + 0b00011100, + 0b00111000, + 0b01110000, + 0b01100000, + 0b01000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 93 $5d 'bracketright' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111100, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00110000, + 0b00111100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 94 $5e 'asciicircum' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00001000, + 0b00011100, + 0b00110110, + 0b01100011, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 95 $5f 'underscore' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b11111111, + 0b00000000, + 0b00000000, +// 96 $60 'grave' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00001100, + 0b00001100, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 97 $61 'a' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00011110, + 0b00110000, + 0b00111110, + 0b00110011, + 0b00110011, + 0b00110011, + 0b01101110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 98 $62 'b' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000111, + 0b00000110, + 0b00000110, + 0b00011110, + 0b00110110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 99 $63 'c' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b00000011, + 0b00000011, + 0b00000011, + 0b01100011, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 100 $64 'd' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00111000, + 0b00110000, + 0b00110000, + 0b00111100, + 0b00110110, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b01101110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 101 $65 'e' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b01111111, + 0b00000011, + 0b00000011, + 0b01100011, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 102 $66 'f' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00011100, + 0b00110110, + 0b00100110, + 0b00000110, + 0b00001111, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00001111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 103 $67 'g' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01101110, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00111110, + 0b00110000, + 0b00110011, + 0b00011110, + 0b00000000, +// 104 $68 'h' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000111, + 0b00000110, + 0b00000110, + 0b00110110, + 0b01101110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 105 $69 'i' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00011100, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00111100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 106 $6a 'j' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01100000, + 0b01100000, + 0b00000000, + 0b01110000, + 0b01100000, + 0b01100000, + 0b01100000, + 0b01100000, + 0b01100000, + 0b01100000, + 0b01100110, + 0b01100110, + 0b00111100, + 0b00000000, +// 107 $6b 'k' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000111, + 0b00000110, + 0b00000110, + 0b01100110, + 0b00110110, + 0b00011110, + 0b00011110, + 0b00110110, + 0b01100110, + 0b01100111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 108 $6c 'l' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00011100, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00111100, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 109 $6d 'm' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00110111, + 0b01111111, + 0b01101011, + 0b01101011, + 0b01101011, + 0b01101011, + 0b01100011, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 110 $6e 'n' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00111011, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 111 $6f 'o' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 112 $70 'p' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00111011, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00111110, + 0b00000110, + 0b00000110, + 0b00001111, + 0b00000000, +// 113 $71 'q' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01101110, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00111110, + 0b00110000, + 0b00110000, + 0b01111000, + 0b00000000, +// 114 $72 'r' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00111011, + 0b01101110, + 0b01100110, + 0b00000110, + 0b00000110, + 0b00000110, + 0b00001111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 115 $73 's' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00111110, + 0b01100011, + 0b00000110, + 0b00011100, + 0b00110000, + 0b01100011, + 0b00111110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 116 $74 't' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00001000, + 0b00001100, + 0b00001100, + 0b00111111, + 0b00001100, + 0b00001100, + 0b00001100, + 0b00001100, + 0b01101100, + 0b00111000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 117 $75 'u' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b00110011, + 0b01101110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 118 $76 'v' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b01100110, + 0b00111100, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 119 $77 'w' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01100011, + 0b01100011, + 0b01101011, + 0b01101011, + 0b01101011, + 0b01111111, + 0b00110110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 120 $78 'x' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01100011, + 0b00110110, + 0b00011100, + 0b00011100, + 0b00011100, + 0b00110110, + 0b01100011, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 121 $79 'y' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01111110, + 0b01100000, + 0b00110000, + 0b00011111, + 0b00000000, +// 122 $7a 'z' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b01111111, + 0b00110011, + 0b00011000, + 0b00001100, + 0b00000110, + 0b01100011, + 0b01111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 123 $7b 'braceleft' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01110000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00001110, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b01110000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 124 $7c 'bar' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 125 $7d 'braceright' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00001110, + 0b00011000, + 0b00011000, + 0b00011000, + 0b01110000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00011000, + 0b00001110, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 126 $7e 'asciitilde' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b01101110, + 0b00111011, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +// 127 $7f 'char127' +// width 8, bbx 0, bby -4, bbw 8, bbh 16 + 8, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00001000, + 0b00011100, + 0b00110110, + 0b01100011, + 0b01100011, + 0b01100011, + 0b01111111, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, + 0b00000000, +}; diff --git a/sys/include/hx8357.h b/sys/include/hx8357.h new file mode 100644 index 0000000..9562826 --- /dev/null +++ b/sys/include/hx8357.h @@ -0,0 +1,21 @@ +#ifndef _HX8356_H +#define _HX8357_H + +#include "tty.h" + +extern const struct devspec hx8357devs[]; +extern int hx8357_open(dev_t dev, int flag, int mode); +extern int hx8357_close(dev_t dev, int flag, int mode); +extern int hx8357_read(dev_t dev, struct uio *uio, int flag); +extern int hx8357_write(dev_t dev, struct uio *uio, int flag); +extern int hx8357_ioctl(dev_t dev, register u_int cmd, caddr_t addr, int flag); +extern int hx8357_select(dev_t dev, int rw); +extern void hx8357_putc(dev_t dev, char c); +extern char hx8357_getc(dev_t dev); +extern void hx8357_init(); + + +extern struct tty hx8357_ttys[1]; + + +#endif diff --git a/sys/pic32/cfg/hxtft.dev b/sys/pic32/cfg/hxtft.dev new file mode 100644 index 0000000..15fc01f --- /dev/null +++ b/sys/pic32/cfg/hxtft.dev @@ -0,0 +1,4 @@ +always + file hx8357.o + define HX8357_ENABLED +end always diff --git a/sys/pic32/devsw.c b/sys/pic32/devsw.c index 45a511e..769bb52 100644 --- a/sys/pic32/devsw.c +++ b/sys/pic32/devsw.c @@ -54,6 +54,10 @@ extern int strcmp(char *s1, char *s2); #include "pty.h" #endif +#ifdef HX8357_ENABLED +#include "hx8357.h" +#endif + /* * Null routine; placed in insignificant entries * in the bdevsw and cdevsw tables. @@ -239,6 +243,14 @@ const struct cdevsw cdevsw[] = { }, #endif +#ifdef HX8357_ENABLED +{ + hx8357_open, hx8357_close, hx8357_read, hx8357_write, + hx8357_ioctl, nulldev, hx8357_ttys, hx8357_select, + nostrategy, hx8357_getc, hx8357_putc, hx8357devs +}, +#endif + // End the list with a blank entry { 0, 0, 0, 0, diff --git a/sys/pic32/hx8357.c b/sys/pic32/hx8357.c new file mode 100644 index 0000000..5934a33 --- /dev/null +++ b/sys/pic32/hx8357.c @@ -0,0 +1,774 @@ +/* + * HX8357 TFT driver for PIC32. + * + * Copyright (C) 2014 Majenko Technologies + * + * Permission to use, copy, modify, and distribute this software + * and its documentation for any purpose and without fee is hereby + * granted, provided that the above copyright notice appear in all + * copies and that both that the copyright notice and this + * permission notice and warranty disclaimer appear in supporting + * documentation, and that the name of the author not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * + * The author disclaim all warranties with regard to this + * software, including all implied warranties of merchantability + * and fitness. In no event shall the author be liable for any + * special, indirect or consequential damages or any damages + * whatsoever resulting from loss of use, data or profits, whether + * in an action of contract, negligence or other tortious action, + * arising out of or in connection with the use or performance of + * this software. + */ + +#include "param.h" +#include "conf.h" +#include "user.h" +#include "ioctl.h" +#include "systm.h" +#include "uio.h" +#include "adc.h" +#include "debug.h" +#include "hx8357.h" + +#include "fonts/default.h" + +char frame[40][80]; + +typedef struct { + unsigned char linesPerCharacter; + unsigned char bytesPerLine; + unsigned char startGlyph; + unsigned char endGlyph; + unsigned char bitsPerPixel; +} FontHeader; + + +struct tty hx8357_ttys[1]; + +typedef struct { + union { + unsigned short value; + struct { + unsigned r:5; + unsigned g:6; + unsigned b:5; + } __attribute__((packed)); + } __attribute__((packed)); +} __attribute__((packed)) Color565; + + +#define HX8357_EXIT_SLEEP_MODE 0x11 +#define HX8357_SET_DISPLAY_OFF 0x28 +#define HX8357_SET_DISPLAY_ON 0x29 +#define HX8357_SET_COLUMN_ADDRESS 0x2A +#define HX8357_SET_PAGE_ADDRESS 0x2B +#define HX8357_WRITE_MEMORY_START 0x2C +#define HX8357_READ_MEMORY_START 0x2E +#define HX8357_SET_TEAR_ON 0x35 +#define HX8357_SET_ADDRESS_MODE 0x36 +#define HX8357_SET_PIXEL_FORMAT 0x3A +#define HX8357_WRITE_MEMORY_CONTINUE 0x3C +#define HX8357_READ_MEMORY_CONTINUE 0x3E +#define HX8357_SET_INTERNAL_OSCILLATOR 0xB0 +#define HX8357_SET_POWER_CONTROL 0xB1 +#define HX8357_SET_DISPLAY_MODE 0xB4 +#define HX8357_SET_VCOM_VOLTAGE 0xB6 +#define HX8357_ENABLE_EXTENSION_COMMAND 0xB9 +#define HX8357_SET_PANEL_DRIVING 0xC0 // not documented! +#define HX8357_SET_PANEL_CHARACTERISTIC 0xCC +#define HX8357_SET_GAMMA_CURVE 0xE0 + +static int _width = 320; +static int _height = 480; + +static int cursor_x = 0; +static int cursor_y = 0; + +static int rotation = 0; + +static unsigned short textcolor = 0x7BEF; +static unsigned short texthicolor = 0xFFFF; +static unsigned short textbgcolor = 0x0000; + +const unsigned char *font = Default; +const unsigned char _font_width = 6; +const unsigned char _font_height = 8; + +const struct devspec hx8357devs[] = { + { 0, "tft0" }, + { 1, "tftin0" }, + { 0, 0 } +}; + +void inline static writeCommand(unsigned short c) { + while (PMMODE & PIC32_PMMODE_BUSY); + PMADDR = 0x0000; + PMDIN = c; +} + +void inline static writeData(unsigned short c) { + while (PMMODE & PIC32_PMMODE_BUSY); + PMADDR = 0x0001; + PMDIN = c; +} + +void initDisplay() { + PMCONCLR = PIC32_PMCON_ON; + asm volatile("nop"); + + PMCONSET = PIC32_PMCON_PTWREN | PIC32_PMCON_PTRDEN; + PMCONCLR = PIC32_PMCON_CSF; + PMAEN = 0x0001; // Enable PMA0 pin for RS pin and CS1 as CS + PMMODE = PIC32_PMMODE_MODE16 | PIC32_PMMODE_MODE_MAST2; + PMADDR = 0; + PMCONSET = PIC32_PMCON_ON; + + + writeCommand(HX8357_EXIT_SLEEP_MODE); //Sleep Out + udelay(150000); + writeCommand(HX8357_ENABLE_EXTENSION_COMMAND); + writeData(0xFF); + writeData(0x83); + writeData(0x57); + udelay(1000); + writeCommand(HX8357_SET_POWER_CONTROL); + writeData(0x00); + writeData(0x12); + writeData(0x12); + writeData(0x12); + writeData(0xC3); + writeData(0x44); + udelay(1000); + writeCommand(HX8357_SET_DISPLAY_MODE); + writeData(0x02); + writeData(0x40); + writeData(0x00); + writeData(0x2A); + writeData(0x2A); + writeData(0x20); + writeData(0x91); + udelay(1000); + writeCommand(HX8357_SET_VCOM_VOLTAGE); + writeData(0x38); + udelay(1000); + writeCommand(HX8357_SET_INTERNAL_OSCILLATOR); + writeData(0x68); + writeCommand(0xE3); //Unknown Command + writeData(0x2F); + writeData(0x1F); + writeCommand(0xB5); //Set BGP + writeData(0x01); + writeData(0x01); + writeData(0x67); + writeCommand(HX8357_SET_PANEL_DRIVING); + writeData(0x70); + writeData(0x70); + writeData(0x01); + writeData(0x3C); + writeData(0xC8); + writeData(0x08); + udelay(1000); + writeCommand(0xC2); // Set Gate EQ + writeData(0x00); + writeData(0x08); + writeData(0x04); + udelay(1000); + writeCommand(HX8357_SET_PANEL_CHARACTERISTIC); + writeData(0x09); + udelay(1000); + writeCommand(HX8357_SET_GAMMA_CURVE); + writeData(0x01); + writeData(0x02); + writeData(0x03); + writeData(0x05); + writeData(0x0E); + writeData(0x22); + writeData(0x32); + writeData(0x3B); + writeData(0x5C); + writeData(0x54); + writeData(0x4C); + writeData(0x41); + writeData(0x3D); + writeData(0x37); + writeData(0x31); + writeData(0x21); + writeData(0x01); + writeData(0x02); + writeData(0x03); + writeData(0x05); + writeData(0x0E); + writeData(0x22); + writeData(0x32); + writeData(0x3B); + writeData(0x5C); + writeData(0x54); + writeData(0x4C); + writeData(0x41); + writeData(0x3D); + writeData(0x37); + writeData(0x31); + writeData(0x21); + writeData(0x00); + writeData(0x01); + udelay(1000); + writeCommand(HX8357_SET_PIXEL_FORMAT); //COLMOD RGB888 + writeData(0x55); + writeCommand(HX8357_SET_ADDRESS_MODE); + writeData(0x00); + writeCommand(HX8357_SET_TEAR_ON); //TE ON + writeData(0x00); + udelay(10000); + writeCommand(HX8357_SET_DISPLAY_ON); //Display On + udelay(10000); + writeCommand(HX8357_WRITE_MEMORY_START); //Write SRAM Data + int l, c; + for (l = 0; l < 39; l++) { + for (c = 0; c < 80; c++) { + frame[l][c]=' '; + } + } +} + +void inline static setAddrWindow(unsigned short x0, unsigned short y0, unsigned short x1, unsigned short y1) { + writeCommand(HX8357_SET_COLUMN_ADDRESS); // Column addr set + writeData((x0) >> 8); + writeData(x0); // XSTART + writeData((x1) >> 8); + writeData(x1); // XEND + + writeCommand(HX8357_SET_PAGE_ADDRESS); // Row addr set + writeData((y0) >> 8); + writeData(y0); // YSTART + writeData((y1) >> 8); + writeData(y1); // YEND + + writeCommand(HX8357_WRITE_MEMORY_START); //Write SRAM Data +} + +void inline static setPixel(int x, int y, unsigned short color) { + if((x < 0) ||(x >= _width) || (y < 0) || (y >= _height)) + return; + setAddrWindow(x,y,x+1,y+1); + while (PMMODE & PIC32_PMMODE_BUSY); + PMADDR = 0x0001; + PMDIN = color; +} + + +void inline static fillRectangle(int x, int y, int w, int h, unsigned short color) +{ + setAddrWindow(x, y, x+w-1, y+h-1); + + while (PMMODE & PIC32_PMMODE_BUSY); + PMADDR = 0x0001; + for(y=h; y>0; y--) { + for(x=w; x>0; x--) { + while (PMMODE & PIC32_PMMODE_BUSY); + PMDIN = color; + } + } +} + +void inline static setRotation(unsigned char m) +{ + writeCommand(HX8357_SET_ADDRESS_MODE); + rotation = m % 4; // can't be higher than 3 + switch (rotation) + { + case 0: + //PORTRAIT + writeData(0x0000); + _width = 320; + _height = 480; + break; + case 1: + //LANDSCAPE + writeData(0x0060); + _width = 480; + _height = 320; + break; + case 2: + //UPSIDE DOWN PORTRAIT + writeData(0x00C0); + _width = 320; + _height = 480; + break; + case 3: + //UPSIDE DOWN LANDSCAPE + writeData(0x00A0); + _width = 480; + _height = 320; + break; + } +} + +unsigned short inline static mix(unsigned short a, unsigned short b, unsigned char pct) { + Color565 col_a; + Color565 col_b; + Color565 col_out; + col_a.value = a; + col_b.value = b; + unsigned int temp; + temp = (((int)col_a.r * (255-pct)) / 255) + (((unsigned int)col_b.r * pct) / 255); + col_out.r = temp; + temp = (((int)col_a.g * (255-pct)) / 255) + (((unsigned int)col_b.g * pct) / 255); + col_out.g = temp; + temp = (((int)col_a.b * (255-pct)) / 255) + (((unsigned int)col_b.b * pct) / 255); + col_out.b = temp; + return col_out.value; +} + + +unsigned char drawChar(int x, int y, unsigned char c, unsigned short color, unsigned short bg) { + + if (font == NULL) { + return 0; + } + + FontHeader *header = (FontHeader *)font; + + if (c < header->startGlyph || c > header->endGlyph) { + return 0; + } + + c = c - header->startGlyph; + + // Start of this character's data is the character number multiplied by the + // number of lines in a character (plus one for the character width) multiplied + // by the number of bytes in a line, and then offset by 4 for the header. + unsigned int charstart = (c * ((header->linesPerCharacter * header->bytesPerLine) + 1)) + sizeof(FontHeader); // Start of character data + unsigned char charwidth = font[charstart++]; // The first byte of a block is the width of the character + + unsigned int bitmask = (1 << header->bitsPerPixel) - 1; + + setAddrWindow(x, y, x + charwidth - 1, y + header->linesPerCharacter - 1); + + char lineNumber = 0; + for (lineNumber = 0; lineNumber < header->linesPerCharacter; lineNumber++ ) { + unsigned char lineData = 0; + + char bitsLeft = -1; + unsigned char byteNumber = 0; + + char pixelNumber = 0; + for (pixelNumber = 0; pixelNumber < charwidth; pixelNumber++) { + if (bitsLeft <= 0) { + bitsLeft = 8; + lineData = font[charstart + (lineNumber * header->bytesPerLine) + (header->bytesPerLine - byteNumber - 1)]; + byteNumber++; + } + unsigned int pixelValue = lineData & bitmask; + if (pixelValue > 0) { + writeData(color); + } else { + writeData(bg); + } + lineData >>= header->bitsPerPixel; + bitsLeft -= header->bitsPerPixel; + } + } + return charwidth; +} + +void updateLine(int l) { + if (l < 0) return; + if (l > 39) return; + + int c; + for (c = 0; c < 80; c++) { + drawChar(c * _font_width, l * _font_height, frame[l][c] & 0x7F, frame[l][c] & 0x80 ? texthicolor : textcolor, textbgcolor); + } +} + +void scrollUp() { + int l, c; + for (l = 0; l < 39; l++) { + for (c = 0; c < 80; c++) { + frame[l][c] = frame[l+1][c]; + } + updateLine(l); + } + for (c = 0; c < 80; c++) { + frame[39][c] = ' '; + } + updateLine(39); +} + +int inEscape = 0; + +int edValPos = 0; +int edVal[4]; + +int bold = 0; + +void printChar(unsigned char c) { + switch (c) { + case '\n': + cursor_y ++; + if (cursor_y > 39) { + scrollUp(); + cursor_y = 39; + } + break; + case '\r': + cursor_x = 0; + break; + case 8: + cursor_x--; + if (cursor_x < 0) { + cursor_x = 79; + cursor_y--; + if (cursor_y < 0) { + cursor_y = 0; + } + } + break; + default: + frame[cursor_y][cursor_x] = c | (bold ? 0x80 : 0x00); + cursor_x++; + if (cursor_x == 80) { + cursor_x = 0; + cursor_y++; + if (cursor_y == 40) { + cursor_y = 39; + scrollUp(); + } + } + updateLine(cursor_y); + + } +} + +int extended = 0; + +void writeChar(unsigned char c) { + + int i, j; + updateLine(cursor_y); + + if (inEscape == 1) { + + switch (c) { + case 27: + inEscape = 0; + printChar('^'); + printChar('['); + break; + case '[': + extended = 1; + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + edVal[edValPos%4] *= 10; + edVal[edValPos%4] += c - '0'; + break; + case ';': + edValPos++; + edVal[edValPos%4] = 0; + break; + case 'J': + if (extended == 1) { + if (edVal[0] == 0) { + for (i = cursor_y; i < 40; i++) { + for (j = 0; j < 80; j++) { + frame[i][j] = ' '; + } + updateLine(i); + } + } else if (edVal[0] == 1) { + for (i = 0; i < cursor_y; i++) { + for (j = 0; j < 80; j++) { + frame[i][j] = ' '; + } + updateLine(i); + } + } else if (edVal[0] == 2) { + for (i = 0; i < 40; i++) { + for (j = 0; j < 80; j++) { + frame[i][j] = ' '; + } + updateLine(i); + } + } + } + inEscape = 0; + break; + case 'H': + if (extended == 1) { + if (edVal[0] == 0) { + edVal[0] = 1; + } + if (edVal[1] == 0) { + edVal[1] = 1; + } + cursor_x = (edVal[1] - 1) % 80; + cursor_y = (edVal[0] - 1) % 40; + } + inEscape = 0; + break; + case 'm': + if (extended == 1) { + if (edVal[0] == 0) { + bold = 0; + } else if (edVal[0] == 1) { + bold = 1; + } + } + inEscape = 0; + break; + + case 'A': + if (extended == 0) { + cursor_y--; + if (cursor_y > 0) { + cursor_y = 39; + } + } + inEscape = 0; + break; + + case 'B': + if (extended == 0) { + cursor_y++; + if (cursor_y == 40) { + cursor_y = 0; + } + } + inEscape = 0; + break; + + case 'C': + if (extended == 0) { + cursor_x++; + if (cursor_x == 80) { + cursor_x = 0; + cursor_y++; + if (cursor_y == 40) { + cursor_y = 0; + } + } + } + inEscape = 0; + break; + + case 'D': + if (extended == 0) { + cursor_x--; + if (cursor_x < 0) { + cursor_x = 79; + cursor_y--; + if (cursor_y < 0) { + cursor_y = 39; + } + } + } + inEscape = 0; + break; + + case 'K': + if (extended == 1) { + if (edVal[0] == 0) { + for (i = cursor_x; i < 80; i++) { + frame[cursor_y][i] = ' '; + } + } else if (edVal[1] == 1) { + for (i = 0; i < cursor_x; i++) { + frame[cursor_y][i] = ' '; + } + } else { + for (i = 0; i < 80; i++) { + frame[cursor_y][i] = ' '; + } + } + updateLine(cursor_y); + } + inEscape = 0; + break; + + default: + if (extended) { + printf("Unhandled extended escape code %c\n", c); + } else { + printf("Unhandled escape code %c\n", c); + } + inEscape = 0; + break; + } + + } else { + if (c == 27) { + inEscape = 1; + extended = 0; + edVal[0] = 0; + edValPos = 0; + } else { + printChar(c); + } + } + drawChar(cursor_x * _font_width, cursor_y * _font_height, frame[cursor_y][cursor_x] & 0x7F, 0x0000, bold ? texthicolor : textcolor); +// for (i = 0; i < _font_width; i++) { +// setPixel(cursor_x * _font_width + i, (cursor_y + 1) * _font_height - 1, 0xFFFF); +// } + +} + +void hx8357_start(struct tty *tp) { + register int s; + + s = spltty(); + ttyowake(tp); +// tp->t_state &= TS_BUSY; + if (tp->t_outq.c_cc > 0) { + led_control (LED_TTY, 1); + while (tp->t_outq.c_cc != 0) { + int c = getc (&tp->t_outq); + writeChar(c); + } + led_control (LED_TTY, 0); + } +// tp->t_state |= TS_BUSY; + splx (s); +} + +void hx8357_init() { + initDisplay(); + setRotation(1); + int i,j; + for (i = 0; i < 40; i++) { + for (j = 0; j < 80; j++) { + frame[i][j] = ' '; + } + updateLine(i); + } +} + +int ttyIsOpen = 0; + +int hx8357_open(dev_t dev, int flag, int mode) { + int unit = minor(dev); + + if (unit == 0) { + ttyIsOpen = 1; + struct tty *tp = &hx8357_ttys[0]; + tp->t_oproc = hx8357_start; + tp->t_state = TS_ISOPEN | TS_CARR_ON; + tp->t_flags = ECHO | XTABS | CRMOD | CRTBS | CRTERA | CTLECH | CRTKIL; + return ttyopen(dev, tp); + } + if (unit == 1) { + if (!ttyIsOpen) { + return EIO; + } + return 0; + } + return ENODEV; +} + +int hx8357_close(dev_t dev, int flag, int mode) { + int unit = minor(dev); + + if (unit == 0) { + ttyIsOpen = 0; + struct tty *tp = &hx8357_ttys[0]; + ttyclose(tp); + return 0; + } + + if (unit == 1) { + return 0; + } + return ENODEV; +} + +int hx8357_read(dev_t dev, struct uio *uio, int flag) { + int unit = minor(dev); + + if (unit == 0) { + struct tty *tp = &hx8357_ttys[unit]; + return ttread(tp, uio, flag); + } + if (unit == 1) { + return EIO; + } + + return ENODEV; +} + +int hx8357_write(dev_t dev, struct uio *uio, int flag) { + int unit = minor(dev); + + if (unit == 0) { + struct tty *tp = &hx8357_ttys[0]; + return ttwrite(tp, uio, flag); + } + + if (unit == 1) { + if (!ttyIsOpen) { + return EIO; + } + struct tty *tp = &hx8357_ttys[0]; + struct iovec *iov = uio->uio_iov; + + while (iov->iov_len > 0) { + ttyinput(*(iov->iov_base), tp); + iov->iov_base ++; + iov->iov_len --; + uio->uio_resid --; + uio->uio_offset ++; + } + return 0; + } + return ENODEV; +} + +int hx8357_ioctl(dev_t dev, register u_int cmd, caddr_t addr, int flag) { + int unit = minor(dev); + + if (unit == 0) { + struct tty *tp = &hx8357_ttys[unit]; + int error; + + error = ttioctl(tp, cmd, addr, flag); + if (error < 0) + error = ENOTTY; + return (error); + } + if (unit == 1) { + return EIO; + } + + return ENODEV; + +} + +void hx8357_putc(dev_t dev, char c) { + writeChar(c); +} + +char hx8357_getc(dev_t dev) { + return 0; +} + +int hx8357_select (dev_t dev, int rw) { + int unit = minor(dev); + if (unit == 0) { + struct tty *tp = &hx8357_ttys[unit]; + return (ttyselect (tp, rw)); + } + if (unit == 1) { + return EIO; + } + return ENODEV; +} + diff --git a/sys/pic32/machdep.c b/sys/pic32/machdep.c index bf4cf1e..7ccea87 100644 --- a/sys/pic32/machdep.c +++ b/sys/pic32/machdep.c @@ -27,6 +27,10 @@ # include #endif +#ifdef HX8357_ENABLED +#include "hx8357.h" +#endif + #ifdef POWER_ENABLED extern void power_init(); extern void power_off(); @@ -344,6 +348,9 @@ startup() #endif #ifdef UARTUSB_ENABLED usbinit(); +#endif +#ifdef HX8357_ENABLED + hx8357_init(); #endif cninit(); diff --git a/sys/pic32/picadillo_rambo/Makefile b/sys/pic32/picadillo_rambo/Makefile index e7bddc7..a37cfa6 100644 --- a/sys/pic32/picadillo_rambo/Makefile +++ b/sys/pic32/picadillo_rambo/Makefile @@ -6,13 +6,13 @@ S = ../../../tools/configsys/../../sys/kernel vpath %.c $(M):$(S) vpath %.S $(M):$(S) -KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rd_spirams.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o +KERNOBJ += adc.o clock.o cons.o devsw.o exception.o exec_aout.o exec_conf.o exec_elf.o exec_script.o exec_subr.o gpio.o hx8357.o init_main.o init_sysent.o kern_clock.o kern_descrip.o kern_exec.o kern_exit.o kern_fork.o kern_mman.o kern_proc.o kern_prot.o kern_prot2.o kern_resource.o kern_sig.o kern_sig2.o kern_subr.o kern_synch.o kern_sysctl.o kern_time.o machdep.o mem.o rd_sd.o rd_spirams.o rdisk.o signal.o spi_bus.o startup.o subr_prf.o subr_rmap.o swap.o sys_generic.o sys_inode.o sys_pipe.o sys_process.o syscalls.o sysctl.o tty.o tty_subr.o tty_tty.o uart.o ufs_alloc.o ufs_bio.o ufs_bmap.o ufs_dsort.o ufs_fio.o ufs_inode.o ufs_mount.o ufs_namei.o ufs_subr.o ufs_syscalls.o ufs_syscalls2.o vers.o vfs_vnops.o vm_sched.o vm_swap.o vm_swp.o EXTRA_TARGETS = DEFS += -DADC_ENABLED=YES DEFS += -DBUS_DIV=1 DEFS += -DBUS_KHZ=80000 -DEFS += -DCONSOLE_DEVICE=tty0 +DEFS += -DCONSOLE_DEVICE=tft0 DEFS += -DCPU_IDIV=2 DEFS += -DCPU_KHZ=80000 DEFS += -DCPU_MUL=20 @@ -46,13 +46,14 @@ DEFS += -DEXEC_AOUT DEFS += -DEXEC_ELF DEFS += -DEXEC_SCRIPT DEFS += -DGPIO_ENABLED=YES +DEFS += -DHX8357_ENABLED DEFS += -DKERNEL -DEFS += -DPARTITION="spirams0:sa@1500" +DEFS += -DPARTITION="spirams0:sa@2040" DEFS += -DPIC32MX7 DEFS += -DSD0_CS_PIN=9 DEFS += -DSD0_CS_PORT=TRISG DEFS += -DSD0_PORT=2 -DEFS += -DSPIRAMS_CHIPS=13 +DEFS += -DSPIRAMS_CHIPS=16 DEFS += -DSPIRAMS_CHIPSIZE=128 DEFS += -DSPIRAMS_CS0_PIN=0 DEFS += -DSPIRAMS_CS0_PORT=TRISA @@ -62,6 +63,12 @@ DEFS += -DSPIRAMS_CS11_PIN=7 DEFS += -DSPIRAMS_CS11_PORT=TRISA DEFS += -DSPIRAMS_CS12_PIN=14 DEFS += -DSPIRAMS_CS12_PORT=TRISG +DEFS += -DSPIRAMS_CS13_PIN=12 +DEFS += -DSPIRAMS_CS13_PORT=TRISG +DEFS += -DSPIRAMS_CS14_PIN=13 +DEFS += -DSPIRAMS_CS14_PORT=TRISG +DEFS += -DSPIRAMS_CS15_PIN=5 +DEFS += -DSPIRAMS_CS15_PORT=TRISF DEFS += -DSPIRAMS_CS1_PIN=1 DEFS += -DSPIRAMS_CS1_PORT=TRISA DEFS += -DSPIRAMS_CS2_PIN=4 diff --git a/sys/pic32/picadillo_rambo/PICADILLO_RAMBO b/sys/pic32/picadillo_rambo/PICADILLO_RAMBO index 415c6d8..9e8dd20 100644 --- a/sys/pic32/picadillo_rambo/PICADILLO_RAMBO +++ b/sys/pic32/picadillo_rambo/PICADILLO_RAMBO @@ -8,15 +8,16 @@ linker bootloader-max32 device kernel cpu_khz=80000 bus_khz=80000 -device console device=tty0 +device console device=tft0 device uart1 baud=115200 device rdisk device sd0 port=2 cs=48 -device spirams0 port=4 chips=13 cs0=26 cs1=27 cs2=28 cs3=29 cs4=30 cs5=31 cs6=32 cs7=33 cs8=34 cs9=35 cs10=36 cs11=37 cs12=38 +device spirams0 port=4 chips=16 cs0=26 cs1=27 cs2=28 cs3=29 cs4=30 cs5=31 cs6=32 cs7=33 cs8=34 cs9=35 cs10=36 cs11=37 cs12=38 cs13=39 cs14=40 cs15=51 -option PARTITION=spirams0:sa@1500 +option PARTITION=spirams0:sa@2040 +device hxtft device gpio device adc device foreignbootloader diff --git a/sys/pic32/rd_spirams.c b/sys/pic32/rd_spirams.c new file mode 100644 index 0000000..531080b --- /dev/null +++ b/sys/pic32/rd_spirams.c @@ -0,0 +1,438 @@ +#include "param.h" +#include "systm.h" +#include "buf.h" +#include "errno.h" +#include "dk.h" +#include "rdisk.h" +#include "spi_bus.h" + +#include "debug.h" + +#define SPIRAM_WREN 0x06 +#define SPIRAM_WRDI 0x04 +#define SPIRAM_RDSR 0x05 +#define SPIRAM_WRSR 0x01 +#define SPIRAM_READ 0x03 +#define SPIRAM_WRITE 0x02 +#define SPIRAM_SLEEP 0xB9 +#define SPIRAM_WAKE 0xAB + +#ifndef SPIRAMS_MHZ +#define SPIRAMS_MHZ 10 +#endif + +int fd[SPIRAMS_CHIPS]; + +int spirams_size(int unit) +{ + return SPIRAMS_CHIPS * SPIRAMS_CHIPSIZE; +} + +#define MRBSIZE 1024 +#define MRBLOG2 10 + +unsigned int spir_read_block(unsigned int chip, unsigned int address, unsigned int length, char *data) +{ + register unsigned int cs = 0; + + switch(chip) + { + case 0: + #ifdef SPIRAMS_LED0_PORT + TRIS_CLR(SPIRAMS_LED0_PORT) = 1<>16); + spi_transfer(fd[chip], address>>8); + spi_transfer(fd[chip], address); + + // If the length is a multiple of 32 bits, then do a 32 bit transfer +/* + if((length & 0x03) == 0) + spi_bulk_read_32(fd[chip],length,data); + else if((length & 0x01) == 0) + spi_bulk_read_16(fd[chip],length,data); + else +*/ + spi_bulk_read(fd[chip],length,(unsigned char *)data); + + spi_deselect(fd[chip]); + + switch(chip) + { + case 0: + #ifdef SPIRAMS_LED0_PORT + LAT_CLR(SPIRAMS_LED0_PORT) = 1< 0) + { + pass++; + toread = bcount; + if(toread > MRBSIZE) + toread = MRBSIZE; + + chip = offset / SPIRAMS_CHIPSIZE; + + address = (offset<<10) - (chip * (SPIRAMS_CHIPSIZE*1024)); + + + if(chip>=SPIRAMS_CHIPS) + { + printf("!!!EIO\n"); + return EIO; + } + spir_read_block(chip, address, toread, data); + bcount -= toread; + offset += (toread>>MRBLOG2); + data += toread; + } + return 1; +} + +unsigned int spir_write_block(unsigned int chip, unsigned int address, unsigned int length, char *data) +{ + register unsigned int cs = 0; + char blank __attribute__((unused)); + + switch(chip) + { + case 0: + #ifdef SPIRAMS_LED0_PORT + TRIS_CLR(SPIRAMS_LED0_PORT) = 1<>16); + spi_transfer(fd[chip], address>>8); + spi_transfer(fd[chip], address); + +/* + if((length & 0x03) == 0) + spi_bulk_write_32(fd[chip],length,data); + else if((length & 0x01) == 0) + spi_bulk_write_16(fd[chip],length,data); + else +*/ + spi_bulk_write(fd[chip],length,(unsigned char *)data); + + spi_deselect(fd[chip]); + + switch(chip) + { + case 0: + #ifdef SPIRAMS_LED0_PORT + LAT_CLR(SPIRAMS_LED0_PORT) = 1< 0) + { + pass++; + towrite = bcount; + if(towrite > MRBSIZE) + towrite = MRBSIZE; + + chip = offset / SPIRAMS_CHIPSIZE; + address = (offset<<10) - (chip * (SPIRAMS_CHIPSIZE*MRBSIZE)); + + if(chip>=SPIRAMS_CHIPS) + { + printf("!!!EIO\n"); + return EIO; + } + + spir_write_block(chip, address, towrite, data); + bcount -= towrite; + offset += (towrite>>MRBLOG2); + data += towrite; + } + return 1; +} + +void spirams_preinit (int unit) +{ + struct buf *bp; + + if (unit >= 1) + return; + + /* Initialize hardware. */ + + + fd[0] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS0_PORT,SPIRAMS_CS0_PIN); + if(fd[0]==-1) return; + + spi_brg(fd[0],SPIRAMS_MHZ * 1000); + spi_set(fd[0],PIC32_SPICON_CKE); + +#ifdef SPIRAMS_CS1_PORT + fd[1] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS1_PORT,SPIRAMS_CS1_PIN); + + spi_brg(fd[1],SPIRAMS_MHZ * 1000); + spi_set(fd[1],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS2_PORT + fd[2] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS2_PORT,SPIRAMS_CS2_PIN); + + spi_brg(fd[2],SPIRAMS_MHZ * 1000); + spi_set(fd[2],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS3_PORT + fd[3] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS3_PORT,SPIRAMS_CS3_PIN); + + spi_brg(fd[3],SPIRAMS_MHZ * 1000); + spi_set(fd[3],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS4_PORT + fd[4] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS4_PORT,SPIRAMS_CS4_PIN); + + spi_brg(fd[4],SPIRAMS_MHZ * 1000); + spi_set(fd[4],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS5_PORT + fd[5] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS5_PORT,SPIRAMS_CS5_PIN); + + spi_brg(fd[5],SPIRAMS_MHZ * 1000); + spi_set(fd[5],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS6_PORT + fd[6] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS6_PORT,SPIRAMS_CS6_PIN); + + spi_brg(fd[6],SPIRAMS_MHZ * 1000); + spi_set(fd[6],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS7_PORT + fd[7] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS7_PORT,SPIRAMS_CS7_PIN); + + spi_brg(fd[7],SPIRAMS_MHZ * 1000); + spi_set(fd[7],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS8_PORT + fd[8] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS8_PORT,SPIRAMS_CS8_PIN); + + spi_brg(fd[8],SPIRAMS_MHZ * 1000); + spi_set(fd[8],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS9_PORT + fd[9] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS9_PORT,SPIRAMS_CS9_PIN); + + spi_brg(fd[9],SPIRAMS_MHZ * 1000); + spi_set(fd[9],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS10_PORT + fd[10] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS10_PORT,SPIRAMS_CS10_PIN); + + spi_brg(fd[10],SPIRAMS_MHZ * 1000); + spi_set(fd[10],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS11_PORT + fd[11] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS11_PORT,SPIRAMS_CS11_PIN); + + spi_brg(fd[11],SPIRAMS_MHZ * 1000); + spi_set(fd[11],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS12_PORT + fd[12] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS12_PORT,SPIRAMS_CS12_PIN); + + spi_brg(fd[12],SPIRAMS_MHZ * 1000); + spi_set(fd[12],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS13_PORT + fd[13] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS13_PORT,SPIRAMS_CS13_PIN); + + spi_brg(fd[13],SPIRAMS_MHZ * 1000); + spi_set(fd[13],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS14_PORT + fd[14] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS14_PORT,SPIRAMS_CS14_PIN); + + spi_brg(fd[14],SPIRAMS_MHZ * 1000); + spi_set(fd[14],PIC32_SPICON_CKE); +#endif +#ifdef SPIRAMS_CS15_PORT + fd[15] = spi_open(SPIRAMS_PORT,(unsigned int *)&SPIRAMS_CS15_PORT,SPIRAMS_CS15_PIN); + + spi_brg(fd[15],SPIRAMS_MHZ * 1000); + spi_set(fd[15],PIC32_SPICON_CKE); +#endif + + printf("spirams0: port %d %s, size %dKB, speed %d Mbit/sec\n", + SPIRAMS_PORT, spi_name(fd[0]),SPIRAMS_CHIPS * SPIRAMS_CHIPSIZE, + spi_get_brg(fd[0]) / 1000); + bp = prepartition_device("spirams0"); + if(bp) + { + spirams_write (0, 0, bp->b_addr, 512); + brelse(bp); + } +}