// Shared 8x8 bitmap console font for SUB-OS // // One source of truth for the framebuffer console, the 2D canvas rasterizer // and the desktop compositor. Covers printable ASCII 32..127; one byte per // scanline, most significant bit leftmost. #include const uint8_t font8x8_basic[FONT8X8_GLYPHS][FONT8X8_HEIGHT] = { {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // space {0x18,0x3c,0x3c,0x18,0x18,0x00,0x18,0x00}, // ! {0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00}, // " {0x6c,0x6c,0xfe,0x6c,0xfe,0x6c,0x6c,0x00}, // # {0x18,0x3e,0x60,0x3c,0x06,0x7c,0x18,0x00}, // $ {0x00,0x63,0x66,0x0c,0x18,0x33,0x63,0x00}, // % {0x38,0x6c,0x38,0x76,0xdc,0xcc,0x76,0x00}, // & {0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00}, // ' {0x0c,0x18,0x30,0x30,0x30,0x18,0x0c,0x00}, // ( {0x30,0x18,0x0c,0x0c,0x0c,0x18,0x30,0x00}, // ) {0x00,0x66,0x3c,0xff,0x3c,0x66,0x00,0x00}, // * {0x00,0x18,0x18,0x7e,0x18,0x18,0x00,0x00}, // + {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30}, // {0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00}, // - {0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00}, // . {0x06,0x0c,0x18,0x30,0x60,0xc0,0x80,0x00}, // / {0x7c,0xc6,0xce,0xd6,0xe6,0xc6,0x7c,0x00}, // 0 {0x18,0x38,0x18,0x18,0x18,0x18,0x7e,0x00}, // 1 {0x7c,0xc6,0x06,0x1c,0x30,0x66,0xfe,0x00}, // 2 {0x7c,0xc6,0x06,0x3c,0x06,0xc6,0x7c,0x00}, // 3 {0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x1e,0x00}, // 4 {0xfe,0xc0,0xfc,0x06,0x06,0xc6,0x7c,0x00}, // 5 {0x7c,0xc6,0xc0,0xfc,0xc6,0xc6,0x7c,0x00}, // 6 {0xfe,0x06,0x0c,0x18,0x30,0x30,0x30,0x00}, // 7 {0x7c,0xc6,0xc6,0x7c,0xc6,0xc6,0x7c,0x00}, // 8 {0x7c,0xc6,0xc6,0x7e,0x06,0xc6,0x7c,0x00}, // 9 {0x00,0x18,0x18,0x00,0x18,0x18,0x00,0x00}, // : {0x00,0x18,0x18,0x00,0x18,0x18,0x30,0x00}, // ; {0x06,0x0c,0x18,0x30,0x18,0x0c,0x06,0x00}, // < {0x00,0x00,0x7e,0x00,0x7e,0x00,0x00,0x00}, // = {0x60,0x30,0x18,0x0c,0x18,0x30,0x60,0x00}, // > {0x7c,0xc6,0x0c,0x18,0x18,0x00,0x18,0x00}, // ? {0x7c,0xc6,0xde,0xde,0xdc,0xc0,0x7c,0x00}, // @ {0x38,0x6c,0xc6,0xfe,0xc6,0xc6,0xc6,0x00}, // A {0xfc,0x66,0x66,0x7c,0x66,0x66,0xfc,0x00}, // B {0x3c,0x66,0xc0,0xc0,0xc0,0x66,0x3c,0x00}, // C {0xf8,0x6c,0x66,0x66,0x66,0x6c,0xf8,0x00}, // D {0xfe,0x62,0x68,0x78,0x68,0x62,0xfe,0x00}, // E {0xfe,0x62,0x68,0x78,0x68,0x60,0xf0,0x00}, // F {0x3c,0x66,0xc0,0xc0,0xce,0x66,0x3e,0x00}, // G {0xc6,0xc6,0xc6,0xfe,0xc6,0xc6,0xc6,0x00}, // H {0x3c,0x18,0x18,0x18,0x18,0x18,0x3c,0x00}, // I {0x1e,0x0c,0x0c,0x0c,0xcc,0xcc,0x78,0x00}, // J {0xe6,0x66,0x6c,0x78,0x6c,0x66,0xe6,0x00}, // K {0xf0,0x60,0x60,0x60,0x62,0x66,0xfe,0x00}, // L {0xc6,0xee,0xfe,0xd6,0xc6,0xc6,0xc6,0x00}, // M {0xc6,0xe6,0xf6,0xde,0xce,0xc6,0xc6,0x00}, // N {0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00}, // O {0xfc,0x66,0x66,0x7c,0x60,0x60,0xf0,0x00}, // P {0x7c,0xc6,0xc6,0xc6,0xd6,0xde,0x7c,0x06}, // Q {0xfc,0x66,0x66,0x7c,0x6c,0x66,0xe6,0x00}, // R {0x7c,0xc6,0x60,0x38,0x0c,0xc6,0x7c,0x00}, // S {0x7e,0x18,0x18,0x18,0x18,0x18,0x18,0x00}, // T {0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00}, // U {0xc6,0xc6,0xc6,0xc6,0xc6,0x6c,0x38,0x00}, // V {0xc6,0xc6,0xc6,0xd6,0xfe,0xee,0xc6,0x00}, // W {0xc6,0xc6,0x6c,0x38,0x6c,0xc6,0xc6,0x00}, // X {0x66,0x66,0x66,0x3c,0x18,0x18,0x18,0x00}, // Y {0xfe,0x06,0x0c,0x18,0x30,0x60,0xfe,0x00}, // Z {0x3c,0x30,0x30,0x30,0x30,0x30,0x3c,0x00}, // [ {0xc0,0x60,0x30,0x18,0x0c,0x06,0x02,0x00}, // backslash {0x3c,0x0c,0x0c,0x0c,0x0c,0x0c,0x3c,0x00}, // ] {0x10,0x38,0x6c,0xc6,0x00,0x00,0x00,0x00}, // ^ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff}, // _ {0x30,0x18,0x0c,0x00,0x00,0x00,0x00,0x00}, // ` {0x00,0x00,0x78,0x0c,0x7c,0xcc,0x76,0x00}, // a {0xe0,0x60,0x7c,0x66,0x66,0x66,0xdc,0x00}, // b {0x00,0x00,0x78,0xcc,0xc0,0xcc,0x78,0x00}, // c {0x1c,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00}, // d {0x00,0x00,0x78,0xcc,0xfc,0xc0,0x78,0x00}, // e {0x38,0x6c,0x60,0xf0,0x60,0x60,0xf0,0x00}, // f {0x00,0x00,0x76,0xcc,0xcc,0x7c,0x0c,0xf8}, // g {0xe0,0x60,0x6c,0x76,0x66,0x66,0xe6,0x00}, // h {0x18,0x00,0x38,0x18,0x18,0x18,0x3c,0x00}, // i {0x0c,0x00,0x1c,0x0c,0x0c,0xcc,0xcc,0x78}, // j {0xe0,0x60,0x66,0x6c,0x78,0x6c,0xe6,0x00}, // k {0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00}, // l {0x00,0x00,0xec,0xfe,0xd6,0xc6,0xc6,0x00}, // m {0x00,0x00,0xdc,0x66,0x66,0x66,0x66,0x00}, // n {0x00,0x00,0x7c,0xc6,0xc6,0xc6,0x7c,0x00}, // o {0x00,0x00,0xdc,0x66,0x66,0x7c,0x60,0xf0}, // p {0x00,0x00,0x76,0xcc,0xcc,0x7c,0x0c,0x1e}, // q {0x00,0x00,0xdc,0x76,0x60,0x60,0xf0,0x00}, // r {0x00,0x00,0x7c,0xc0,0x78,0x0c,0xf8,0x00}, // s {0x10,0x30,0x7c,0x30,0x30,0x34,0x18,0x00}, // t {0x00,0x00,0xcc,0xcc,0xcc,0xcc,0x76,0x00}, // u {0x00,0x00,0xc6,0xc6,0xc6,0x6c,0x38,0x00}, // v {0x00,0x00,0xc6,0xc6,0xd6,0xfe,0x6c,0x00}, // w {0x00,0x00,0xc6,0x6c,0x38,0x6c,0xc6,0x00}, // x {0x00,0x00,0xcc,0xcc,0xcc,0x7c,0x0c,0xf8}, // y {0x00,0x00,0xfc,0x18,0x30,0x60,0xfc,0x00}, // z {0x0e,0x18,0x18,0x70,0x18,0x18,0x0e,0x00}, // { {0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00}, // | {0x70,0x18,0x18,0x0e,0x18,0x18,0x70,0x00}, // } {0x76,0xdc,0x00,0x00,0x00,0x00,0x00,0x00}, // ~ {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // DEL }; const uint8_t* font8x8_glyph(char c) { // Compare as unsigned: `char` is signed here, so a high-bit byte such as a // CP437 box-drawing character would otherwise test as negative. unsigned char uc = (unsigned char)c; // Anything outside the printable range renders as a question mark, which is // more legible than a blank when a driver passes raw bytes straight through. if (uc < FONT8X8_FIRST || uc > FONT8X8_LAST) uc = '?'; return font8x8_basic[uc - FONT8X8_FIRST]; }