#ifndef FONT_H #define FONT_H #include // Minimal 8x8 font for ASCII 32-127 // Derived from standard VGA font static const uint8_t font8x8_basic[128][8] = { // 0-31 Control chars (empty) {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, {0}, // 32 Space {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 33 ! {0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00}, // 34 " {0x66, 0x66, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00}, // 35 # {0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00}, // 36 $ {0x18, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x18, 0x00}, // 37 % {0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00}, // 38 & {0x38, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0x76, 0x00}, // 39 ' {0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00}, // 40 ( {0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00}, // 41 ) {0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00}, // 42 * {0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // 43 + {0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00}, // 44 , {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30}, // 45 - {0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00}, // 46 . {0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00}, // 47 / {0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x00}, // 48 0 {0x3C, 0x66, 0x6E, 0x76, 0x66, 0x66, 0x3C, 0x00}, // 49 1 {0x18, 0x18, 0x38, 0x18, 0x18, 0x18, 0x7E, 0x00}, // 50 2 {0x3C, 0x66, 0x06, 0x0C, 0x30, 0x60, 0x7E, 0x00}, // 51 3 {0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 0x00}, // 52 4 {0x06, 0x0E, 0x1E, 0x36, 0x66, 0x7F, 0x06, 0x00}, // 53 5 {0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C, 0x00}, // 54 6 {0x3C, 0x66, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0x00}, // 55 7 {0x7E, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00}, // 56 8 {0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00}, // 57 9 {0x3C, 0x66, 0x66, 0x3E, 0x06, 0x66, 0x3C, 0x00}, // 58 : {0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00}, // 59 ; {0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30}, // 60 < {0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00}, // 61 = {0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00}, // 62 > {0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00}, // 63 ? {0x3C, 0x66, 0x06, 0x0C, 0x18, 0x00, 0x18, 0x00}, // 64 @ {0x3C, 0x66, 0x6E, 0x6A, 0x68, 0x60, 0x3C, 0x00}, // 65 A {0x18, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x00}, // 66 B {0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00}, // 67 C {0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00}, // 68 D {0x78, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0x78, 0x00}, // 69 E {0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E, 0x00}, // 70 F {0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x00}, // 71 G {0x3C, 0x66, 0x60, 0x6E, 0x66, 0x66, 0x3C, 0x00}, // 72 H {0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00}, // 73 I {0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00}, // 74 J {0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x3C, 0x00}, // 75 K {0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66, 0x00}, // 76 L {0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x00}, // 77 M {0x63, 0x77, 0x7F, 0x6B, 0x63, 0x63, 0x63, 0x00}, // 78 N {0x66, 0x76, 0x7E, 0x7E, 0x6E, 0x66, 0x66, 0x00}, // 79 O {0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, // 80 P {0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x00}, // 81 Q {0x3C, 0x66, 0x66, 0x66, 0x6A, 0x3C, 0x0E, 0x00}, // 82 R {0x7C, 0x66, 0x66, 0x7C, 0x78, 0x6C, 0x66, 0x00}, // 83 S {0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C, 0x00}, // 84 T {0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, // 85 U {0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, // 86 V {0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00}, // 87 W {0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // 88 X {0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00}, // 89 Y {0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00}, // 90 Z {0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E, 0x00}, // 91 [ {0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // 92 backslash {0x00, 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00}, // 93 ] {0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00}, // 94 ^ {0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // 95 _ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // 96 ` {0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00}, // 97 a {0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00}, // 98 b {0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00}, // 99 c {0x00, 0x00, 0x3C, 0x66, 0x60, 0x66, 0x3C, 0x00}, // 100 d {0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x3E, 0x00}, // 101 e {0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00}, // 102 f {0x0C, 0x18, 0x18, 0x3E, 0x18, 0x18, 0x18, 0x00}, // 103 g {0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x3C}, // 104 h {0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00}, // 105 i {0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00}, // 106 j {0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x3C, 0x00}, // 107 k {0x60, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0x00}, // 108 l {0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00}, // 109 m {0x00, 0x00, 0x76, 0x7F, 0x6B, 0x6B, 0x63, 0x00}, // 110 n {0x00, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00}, // 111 o {0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00}, // 112 p {0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60}, // 113 q {0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06}, // 114 r {0x00, 0x00, 0x5C, 0x62, 0x60, 0x60, 0x60, 0x00}, // 115 s {0x00, 0x00, 0x3C, 0x60, 0x3C, 0x06, 0x3C, 0x00}, // 116 t {0x10, 0x10, 0x3E, 0x10, 0x10, 0x10, 0x0C, 0x00}, // 117 u {0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00}, // 118 v {0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00}, // 119 w {0x00, 0x00, 0x63, 0x6B, 0x7F, 0x3E, 0x36, 0x00}, // 120 x {0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00}, // 121 y {0x00, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x06, 0x3C}, // 122 z {0x00, 0x00, 0x7E, 0x0C, 0x18, 0x30, 0x7E, 0x00}, // 123 { {0x0E, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0E, 0x00}, // 124 | {0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // 125 } {0x70, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x70, 0x00}, // 126 ~ {0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 127 DEL {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }; #endif