From e0d02d3529349642ebd11d4c9d21b2d41e307907 Mon Sep 17 00:00:00 2001 From: Florian Loeffler Date: Tue, 3 May 2022 12:29:15 +0200 Subject: [PATCH] working on text and font support --- Makefile | 2 +- fbdash | Bin 18728 -> 18456 bytes fbdash.c | 120 +++++++++----- fbfonts.h | 4 +- fonts/Arial-32px.h | 18 +++ fonts/dhepper-font8x8/README | 79 +++++++++ fonts/dhepper-font8x8/SOURCE.md | 1 + fonts/dhepper-font8x8/font8x8.h | 19 +++ .../dhepper-font8x8/font8x8_basic.h | 0 fonts/dhepper-font8x8/font8x8_block.h | 56 +++++++ fonts/dhepper-font8x8/font8x8_box.h | 152 ++++++++++++++++++ fonts/dhepper-font8x8/font8x8_control.h | 56 +++++++ fonts/dhepper-font8x8/font8x8_ext_latin.h | 120 ++++++++++++++ fonts/dhepper-font8x8/font8x8_greek.h | 82 ++++++++++ fonts/dhepper-font8x8/font8x8_hiragana.h | 120 ++++++++++++++ fonts/dhepper-font8x8/font8x8_latin.h | 23 +++ fonts/dhepper-font8x8/font8x8_misc.h | 33 ++++ fonts/dhepper-font8x8/font8x8_sga.h | 48 ++++++ fonts/dhepper-font8x8/render.c | 39 +++++ 19 files changed, 929 insertions(+), 43 deletions(-) create mode 100644 fonts/Arial-32px.h create mode 100644 fonts/dhepper-font8x8/README create mode 100644 fonts/dhepper-font8x8/SOURCE.md create mode 100644 fonts/dhepper-font8x8/font8x8.h rename font8x8_basic.h => fonts/dhepper-font8x8/font8x8_basic.h (100%) create mode 100644 fonts/dhepper-font8x8/font8x8_block.h create mode 100644 fonts/dhepper-font8x8/font8x8_box.h create mode 100644 fonts/dhepper-font8x8/font8x8_control.h create mode 100644 fonts/dhepper-font8x8/font8x8_ext_latin.h create mode 100644 fonts/dhepper-font8x8/font8x8_greek.h create mode 100644 fonts/dhepper-font8x8/font8x8_hiragana.h create mode 100644 fonts/dhepper-font8x8/font8x8_latin.h create mode 100644 fonts/dhepper-font8x8/font8x8_misc.h create mode 100644 fonts/dhepper-font8x8/font8x8_sga.h create mode 100644 fonts/dhepper-font8x8/render.c diff --git a/Makefile b/Makefile index 4dcc90f..ab2c8c0 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -CFLAGS = -g -Wall +CFLAGS = -g -Wall -lm fbdash: fbdash.c fblib gcc fblib.o -o $@ $(CFLAGS) $< diff --git a/fbdash b/fbdash index 005df7981480d04c7ee32a0fef95fcceeb9fb4e8..fc54444b9569efe7d5dc2ee8d0c73c70a478107b 100755 GIT binary patch literal 18456 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 diff --git a/fbdash.c b/fbdash.c index 03fba83..bd24f60 100644 --- a/fbdash.c +++ b/fbdash.c @@ -20,17 +20,83 @@ * */ + #include "fblib.h" #include "fbfonts.h" +#include +#include + +#define WIDTH 240 +#define HEIGHT 320 + +#define FONTH 8 // 37 +#define FONTW 8 // 22 + + // 'global' variables to store screen info char *fbp = 0; + +/* struct fb_var_screeninfo vinfo; struct fb_fix_screeninfo finfo; +*/ + + + +void render_string(char *fbp, char* font, char *text, int x, int y, int r, int g, int b) +{ + int text_length = strlen(text); + printf("text_length = %d\n", text_length); + + int bytes_per_line = ceil(FONTW / 8.0); + printf("bytes_per_line = %d\n", bytes_per_line); + + int char_offset = bytes_per_line * FONTH; + + // each character + for (int char_pos = 0; char_pos < text_length; char_pos++) { + //int char_code = 0; + int char_code = *(text + char_pos); + int x_offset = char_pos * FONTW + x; + + // each line of pixels + for (int line = 0; line < FONTH; line++) { + int y_pos = line + y; + + // each byte in a line of pixels + for (int byte_num = 0; byte_num < bytes_per_line; byte_num++) { + int byte_offset = line * bytes_per_line + byte_num; + char current_byte = *((font + char_code * char_offset) + byte_offset); + + // each bit/pixel in a byte + for (int bit_number = 0; bit_number < 8; bit_number++) { + char mask = 1 << bit_number; + if(current_byte & mask) { + // plot the pixel + printf("x"); + + int x_pos = x_offset + byte_num * 8 + bit_number; + put_pixel(fbp, x_pos, y_pos, 255, 255, 255); + } + else { + // leave empty (or maybe plot 'text backgr color') + printf(" "); + } + } // end "for bit_number" + + } // end "for byte_num" + + printf("\n"); + + } // end "for line" + + } // end "for char_pos" +} + + -#define FONTW 8 -#define FONTH 8 // helper function for drawing - no more need to go mess with // the main function when just want to change what to draw... @@ -39,13 +105,13 @@ void draw() { clear_screen(fbp); // horizontal spacersint x_space = 10; - int y_step_width = vinfo.yres / 4; + int y_step_width = HEIGHT / 4; for (int i = 1; i < 4; i++) { int x0 = 15; - int x1 = vinfo.xres - x0; + int x1 = WIDTH - x0; int y = y_step_width * i; - int r = 200; + int r = 225; int g = 32; int b = 32; @@ -57,41 +123,9 @@ void draw() { - char *text = "HUHU!"; - int text_length = strlen(text); - int i, x, y; - - // see https://www.geeksforgeeks.org/pointer-array-array-pointer/ - //char *fontImg = font8x8_basic; - - for (i = 0; i < text_length; i++) { // each character - int ix = text[i]; - //printf("%c --> %d\n", text[i], ix); - - char *img = font8x8_basic[ix]; - // loop through pixel rows (8 rows with 8 pixels/bits or 1 bytes each) - for (y = 0; y < FONTH; y++) { // each line - - // loop through pixel/bit columns - char row = img[y]; - - for (x = 0; x < FONTW; x++) { // each column - unsigned char mask = 1 << x; - if(row & mask) { - printf("x"); - // plot the pixel - put_pixel(fbp, i * FONTW + x, y, 255, 255, 255); - } - else { - printf(" "); - // leave empty (or maybe plot 'text backgr color') - } - } // end "for x" - printf("\n"); - - } // end "for y" - } // end "for i" - + char *text = "Hello world!"; + //render_string(fbp, (char*)arial_16x16, text, 0, 0, 255, 255, 255); + render_string(fbp, (char*)font8x8_basic, text, 0, 0, 255, 255, 255); } // application entry point @@ -110,6 +144,8 @@ int main(int argc, char* argv[]) } printf("The framebuffer device was opened successfully.\n"); + + /* // Get variable screen information if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) { printf("Error reading variable information.\n"); @@ -123,9 +159,11 @@ int main(int argc, char* argv[]) printf("Error reading fixed information.\n"); } printf("Fixed info: smem_len %d, line_length %d\n", finfo.smem_len, finfo.line_length); +*/ // map fb to user mem - screensize = finfo.smem_len; + //screensize = finfo.smem_len; + screensize = WIDTH*HEIGHT*2; fbp = (char*)mmap(0, screensize, PROT_READ | PROT_WRITE, diff --git a/fbfonts.h b/fbfonts.h index 7c54be7..d46844e 100644 --- a/fbfonts.h +++ b/fbfonts.h @@ -27,4 +27,6 @@ **/ -#include "font8x8_basic.h" +#include "fonts/dhepper-font8x8/font8x8_basic.h" +//#include "fonts/vento-xbm-fonts/ascii_16x26.h" +#include "fonts/arial-16x16.h" diff --git a/fonts/Arial-32px.h b/fonts/Arial-32px.h new file mode 100644 index 0000000..a76f656 --- /dev/null +++ b/fonts/Arial-32px.h @@ -0,0 +1,18 @@ +#define A_width 22 +#define A_height 37 + +static char arial_32[1][111] = { + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x3E, 0x00, + 0x00, 0x3E, 0x00, 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, 0x00, 0x77, 0x00, + 0x80, 0xE3, 0x00, 0x80, 0xE3, 0x00, 0xC0, 0xE3, 0x00, 0xC0, 0xC1, 0x01, + 0xC0, 0xC1, 0x01, 0xE0, 0x80, 0x03, 0xE0, 0x80, 0x03, 0xE0, 0xE9, 0x07, + 0xF0, 0xFF, 0x07, 0xF0, 0xFF, 0x07, 0x78, 0x00, 0x0F, 0x38, 0x00, 0x0E, + 0x38, 0x00, 0x1E, 0x3C, 0x00, 0x1C, 0x1C, 0x00, 0x1C, 0x1C, 0x00, 0x3C, + 0x0E, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00 +} + }; + diff --git a/fonts/dhepper-font8x8/README b/fonts/dhepper-font8x8/README new file mode 100644 index 0000000..4b2872a --- /dev/null +++ b/fonts/dhepper-font8x8/README @@ -0,0 +1,79 @@ +8x8 monochrome bitmap font for rendering +========================================= + +A collection of header files containing a 8x8 bitmap font. + +font8x8.h contains all available characters +font8x8_basic.h contains unicode points U+0000 - U+007F +font8x8_latin.h contains unicode points U+0000 - U+00FF + +Author: Daniel Hepper +License: Public Domain + +Encoding +======== +Every character in the font is encoded row-wise in 8 bytes. + +The least significant bit of each byte corresponds to the first pixel in a + row. + +The character 'A' (0x41 / 65) is encoded as +{ 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00} + + + 0x0C => 0000 1100 => ..XX.... + 0X1E => 0001 1110 => .XXXX... + 0x33 => 0011 0011 => XX..XX.. + 0x33 => 0011 0011 => XX..XX.. + 0x3F => 0011 1111 => xxxxxx.. + 0x33 => 0011 0011 => XX..XX.. + 0x33 => 0011 0011 => XX..XX.. + 0x00 => 0000 0000 => ........ + +To access the nth pixel in a row, right-shift by n. + + . . X X . . . . + | | | | | | | | + (0x0C >> 0) & 1 == 0-+ | | | | | | | + (0x0C >> 1) & 1 == 0---+ | | | | | | + (0x0C >> 2) & 1 == 1-----+ | | | | | + (0x0C >> 3) & 1 == 1-------+ | | | | + (0x0C >> 4) & 1 == 0---------+ | | | + (0x0C >> 5) & 1 == 0-----------+ | | + (0x0C >> 6) & 1 == 0-------------+ | + (0x0C >> 7) & 1 == 0---------------+ + + +Renderer +======== +To visualize the font, a simple renderer is included in render.c + + $ gcc render.c -o render + $ ./render 65 + XX + XXXX + XX XX + XX XX + XXXXXX + XX XX + XX XX + +Credits +======= +These header files are directly derived from an assembler file fetched from: +http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm + +Original header: + +; Summary: font8_8.asm +; 8x8 monochrome bitmap fonts for rendering +; +; Author: +; Marcel Sondaar +; International Business Machines (public domain VGA fonts) +; +; License: +; Public Domain +; + + diff --git a/fonts/dhepper-font8x8/SOURCE.md b/fonts/dhepper-font8x8/SOURCE.md new file mode 100644 index 0000000..d23ecc1 --- /dev/null +++ b/fonts/dhepper-font8x8/SOURCE.md @@ -0,0 +1 @@ +https://github.com/Ventto/xbm-fonts diff --git a/fonts/dhepper-font8x8/font8x8.h b/fonts/dhepper-font8x8/font8x8.h new file mode 100644 index 0000000..06a1523 --- /dev/null +++ b/fonts/dhepper-font8x8/font8x8.h @@ -0,0 +1,19 @@ +/** + * 8x8 monochrome bitmap fonts for rendering + * Author: Daniel Hepper + * + * License: Public Domain + * + * Based on: + * http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm + **/ + +#include "font8x8_basic.h" +#include "font8x8_control.h" +#include "font8x8_ext_latin.h" +#include "font8x8_greek.h" +#include "font8x8_misc.h" +#include "font8x8_box.h" +#include "font8x8_block.h" +#include "font8x8_hiragana.h" +#include "font8x8_sga.h" diff --git a/font8x8_basic.h b/fonts/dhepper-font8x8/font8x8_basic.h similarity index 100% rename from font8x8_basic.h rename to fonts/dhepper-font8x8/font8x8_basic.h diff --git a/fonts/dhepper-font8x8/font8x8_block.h b/fonts/dhepper-font8x8/font8x8_block.h new file mode 100644 index 0000000..4e5d861 --- /dev/null +++ b/fonts/dhepper-font8x8/font8x8_block.h @@ -0,0 +1,56 @@ +/** + * 8x8 monochrome bitmap fonts for rendering + * Author: Daniel Hepper + * + * License: Public Domain + * + * Based on: + * // Summary: font8x8.h + * // 8x8 monochrome bitmap fonts for rendering + * // + * // Author: + * // Marcel Sondaar + * // International Business Machines (public domain VGA fonts) + * // + * // License: + * // Public Domain + * + * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm + **/ + +// Constant: font8x8_2580 +// Contains an 8x8 font map for unicode points U+2580 - U+259F (block elements) +char font8x8_block[32][8] = { + { 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, // U+2580 (top half) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+2581 (box 1/8) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, // U+2582 (box 2/8) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF}, // U+2583 (box 3/8) + { 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}, // U+2584 (bottom half) + { 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, // U+2585 (box 5/8) + { 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, // U+2586 (box 6/8) + { 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, // U+2587 (box 7/8) + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, // U+2588 (solid) + { 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F}, // U+2589 (box 7/8) + { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F}, // U+258A (box 6/8) + { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F}, // U+258B (box 5/8) + { 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F}, // U+258C (left half) + { 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07}, // U+258D (box 3/8) + { 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}, // U+258E (box 2/8) + { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, // U+258F (box 1/8) + { 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0}, // U+2590 (right half) + { 0x55, 0x00, 0xAA, 0x00, 0x55, 0x00, 0xAA, 0x00}, // U+2591 (25% solid) + { 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA}, // U+2592 (50% solid) + { 0xFF, 0xAA, 0xFF, 0x55, 0xFF, 0xAA, 0xFF, 0x55}, // U+2593 (75% solid) + { 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+2594 (box 1/8) + { 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80}, // U+2595 (box 1/8) + { 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F}, // U+2596 (box bottom left) + { 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0}, // U+2597 (box bottom right) + { 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00}, // U+2598 (box top left) + { 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF}, // U+2599 (boxes left and bottom) + { 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0}, // U+259A (boxes top-left and bottom right) + { 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F}, // U+259B (boxes top and left) + { 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0}, // U+259C (boxes top and right) + { 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00}, // U+259D (box top right) + { 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F}, // U+259E (boxes top right and bottom left) + { 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF}, // U+259F (boxes right and bottom) +}; diff --git a/fonts/dhepper-font8x8/font8x8_box.h b/fonts/dhepper-font8x8/font8x8_box.h new file mode 100644 index 0000000..c3d3b57 --- /dev/null +++ b/fonts/dhepper-font8x8/font8x8_box.h @@ -0,0 +1,152 @@ +/** + * 8x8 monochrome bitmap fonts for rendering + * Author: Daniel Hepper + * + * License: Public Domain + * + * Based on: + * // Summary: font8x8.h + * // 8x8 monochrome bitmap fonts for rendering + * // + * // Author: + * // Marcel Sondaar + * // International Business Machines (public domain VGA fonts) + * // + * // License: + * // Public Domain + * + * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm + **/ + +// Constant: font8x8_2500 +// Contains an 8x8 font map for unicode points U+2500 - U+257F (box drawing) +char font8x8_box[128][8] = { + { 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00}, // U+2500 (thin horizontal) + { 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00}, // U+2501 (thick horizontal) + { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08}, // U+2502 (thin vertical) + { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18}, // U+2503 (thich vertical) + { 0x00, 0x00, 0x00, 0x00, 0xBB, 0x00, 0x00, 0x00}, // U+2504 (thin horizontal dashed) + { 0x00, 0x00, 0x00, 0xBB, 0xBB, 0x00, 0x00, 0x00}, // U+2505 (thick horizontal dashed) + { 0x08, 0x00, 0x08, 0x08, 0x08, 0x00, 0x08, 0x08}, // U+2506 (thin vertical dashed) + { 0x18, 0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18}, // U+2507 (thich vertical dashed) + { 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00}, // U+2508 (thin horizontal dotted) + { 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x00}, // U+2509 (thick horizontal dotted) + { 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08}, // U+250A (thin vertical dotted) + { 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18}, // U+250B (thich vertical dotted) + { 0x00, 0x00, 0x00, 0x00, 0xf8, 0x08, 0x08, 0x08}, // U+250C (down L, right L) + { 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x08, 0x08, 0x08}, // U+250D (down L, right H) + { 0x00, 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18}, // U+250E (down H, right L) + { 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18}, // U+250F (down H, right H) + { 0x00, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x08, 0x08}, // U+2510 (down L, left L) + { 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x08, 0x08, 0x08}, // U+2511 (down L, left H) + { 0x00, 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18}, // U+2512 (down H, left L) + { 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18}, // U+2513 (down H, left H) + { 0x08, 0x08, 0x08, 0x08, 0xf8, 0x00, 0x00, 0x00}, // U+2514 (up L, right L) + { 0x08, 0x08, 0x08, 0xf8, 0xf8, 0x00, 0x00, 0x00}, // U+2515 (up L, right H) + { 0x18, 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00}, // U+2516 (up H, right L) + { 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00}, // U+2517 (up H, right H) + { 0x08, 0x08, 0x08, 0x08, 0x0f, 0x00, 0x00, 0x00}, // U+2518 (up L, left L) + { 0x08, 0x08, 0x08, 0x0f, 0x0f, 0x00, 0x00, 0x00}, // U+2519 (up L, left H) + { 0x18, 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00}, // U+251A (up H, left L) + { 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00}, // U+251B (up H, left H) + { 0x08, 0x08, 0x08, 0x08, 0xf8, 0x08, 0x08, 0x08}, // U+251C (down L, right L, up L) + { 0x08, 0x08, 0x08, 0xf8, 0xf8, 0x08, 0x08, 0x08}, // U+251D (down L, right H, up L) + { 0x18, 0x18, 0x18, 0x18, 0xf8, 0x08, 0x08, 0x08}, // U+251E (down L, right L, up H) + { 0x08, 0x08, 0x08, 0x08, 0xf8, 0x18, 0x18, 0x18}, // U+251F (down H, right L, up L) + { 0x18, 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18}, // U+2520 (down H, right L, up H) + { 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x08, 0x08, 0x08}, // U+2521 (down L, right H, up H) + { 0x08, 0x08, 0x08, 0xf8, 0xf8, 0x18, 0x18, 0x18}, // U+2522 (down H, right H, up L) + { 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18}, // U+2523 (down H, right H, up H) + { 0x08, 0x08, 0x08, 0x08, 0x0f, 0x08, 0x08, 0x08}, // U+2524 (down L, left L, up L) + { 0x08, 0x08, 0x08, 0x0f, 0x0f, 0x08, 0x08, 0x08}, // U+2525 (down L, left H, up L) + { 0x18, 0x18, 0x18, 0x18, 0x1f, 0x08, 0x08, 0x08}, // U+2526 (down L, left L, up H) + { 0x08, 0x08, 0x08, 0x08, 0x1f, 0x18, 0x18, 0x18}, // U+2527 (down H, left L, up L) + { 0x18, 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18}, // U+2528 (down H, left L, up H) + { 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x08, 0x08, 0x08}, // U+2529 (down L, left H, up H) + { 0x08, 0x08, 0x08, 0x1f, 0x1f, 0x18, 0x18, 0x18}, // U+252A (down H, left H, up L) + { 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18}, // U+252B (down H, left H, up H) + { 0x00, 0x00, 0x00, 0x00, 0xff, 0x08, 0x08, 0x08}, // U+252C (down L, right L, left L) + { 0x00, 0x00, 0x00, 0x0f, 0xff, 0x08, 0x08, 0x08}, // U+252D (down L, right L, left H) + { 0x00, 0x00, 0x00, 0xf8, 0xff, 0x08, 0x08, 0x08}, // U+252E (down L, right H, left L) + { 0x00, 0x00, 0x00, 0xff, 0xff, 0x08, 0x08, 0x08}, // U+252F (down L, right H, left H) + { 0x00, 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18}, // U+2530 (down H, right L, left L) + { 0x00, 0x00, 0x00, 0x1f, 0xff, 0x18, 0x18, 0x18}, // U+2531 (down H, right L, left H) + { 0x00, 0x00, 0x00, 0xf8, 0xff, 0x18, 0x18, 0x18}, // U+2532 (down H, right H, left L) + { 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18}, // U+2533 (down H, right H, left H) + { 0x08, 0x08, 0x08, 0x08, 0xff, 0x00, 0x00, 0x00}, // U+2534 (up L, right L, left L) + { 0x08, 0x08, 0x08, 0x0f, 0xff, 0x00, 0x00, 0x00}, // U+2535 (up L, right L, left H) + { 0x08, 0x08, 0x08, 0xf8, 0xff, 0x00, 0x00, 0x00}, // U+2536 (up L, right H, left L) + { 0x08, 0x08, 0x08, 0xff, 0xff, 0x00, 0x00, 0x00}, // U+2537 (up L, right H, left H) + { 0x18, 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00}, // U+2538 (up H, right L, left L) + { 0x18, 0x18, 0x18, 0x1f, 0xff, 0x00, 0x00, 0x00}, // U+2539 (up H, right L, left H) + { 0x18, 0x18, 0x18, 0xf8, 0xff, 0x00, 0x00, 0x00}, // U+253A (up H, right H, left L) + { 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00}, // U+253B (up H, right H, left H) + { 0x08, 0x08, 0x08, 0x08, 0xff, 0x08, 0x08, 0x08}, // U+253C (up L, right L, left L, down L) + { 0x08, 0x08, 0x08, 0x0f, 0xff, 0x08, 0x08, 0x08}, // U+253D (up L, right L, left H, down L) + { 0x08, 0x08, 0x08, 0xf8, 0xff, 0x08, 0x08, 0x08}, // U+253E (up L, right H, left L, down L) + { 0x08, 0x08, 0x08, 0xff, 0xff, 0x08, 0x08, 0x08}, // U+253F (up L, right H, left H, down L) + { 0x18, 0x18, 0x18, 0x18, 0xff, 0x08, 0x08, 0x08}, // U+2540 (up H, right L, left L, down L) + { 0x08, 0x08, 0x08, 0x08, 0xff, 0x18, 0x18, 0x18}, // U+2541 (up L, right L, left L, down H) + { 0x18, 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18}, // U+2542 (up H, right L, left L, down H) + { 0x18, 0x18, 0x18, 0x1f, 0xff, 0x08, 0x08, 0x08}, // U+2543 (up H, right L, left H, down L) + { 0x18, 0x18, 0x18, 0xf8, 0xff, 0x08, 0x08, 0x08}, // U+2544 (up H, right H, left L, down L) + { 0x08, 0x08, 0x08, 0x1f, 0xff, 0x18, 0x18, 0x18}, // U+2545 (up L, right L, left H, down H) + { 0x08, 0x08, 0x08, 0xf8, 0xff, 0x18, 0x18, 0x18}, // U+2546 (up L, right H, left L, down H) + { 0x08, 0x08, 0x08, 0xff, 0xff, 0x18, 0x18, 0x18}, // U+2547 (up L, right H, left H, down H) + { 0x18, 0x18, 0x18, 0xff, 0xff, 0x08, 0x08, 0x08}, // U+254B (up H, right H, left H, down L) + { 0x18, 0x18, 0x18, 0xf8, 0xff, 0x18, 0x18, 0x18}, // U+254A (up H, right H, left L, down H) + { 0x18, 0x18, 0x18, 0x1f, 0xff, 0x18, 0x18, 0x18}, // U+2549 (up H, right L, left H, down H) + { 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18}, // U+254B (up H, right H, left H, down H) + { 0x00, 0x00, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00}, // U+254C (thin horizontal broken) + { 0x00, 0x00, 0x00, 0xE7, 0xE7, 0x00, 0x00, 0x00}, // U+254D (thick horizontal broken) + { 0x08, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x08}, // U+254E (thin vertical broken) + { 0x18, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x18}, // U+254F (thich vertical broken) + { 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00}, // U+2550 (double horizontal) + { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14}, // U+2551 (double vertical) + { 0x00, 0x00, 0x00, 0xF8, 0x08, 0xF8, 0x08, 0x08}, // U+2552 (down L, right D) + { 0x00, 0x00, 0x00, 0x00, 0xFC, 0x14, 0x14, 0x14}, // U+2553 (down D, right L) + { 0x00, 0x00, 0x00, 0xFC, 0x04, 0xF4, 0x14, 0x14}, // U+2554 (down D, right D) + { 0x00, 0x00, 0x00, 0x0F, 0x08, 0x0F, 0x08, 0x08}, // U+2555 (down L, left D) + { 0x00, 0x00, 0x00, 0x00, 0x1F, 0x14, 0x14, 0x14}, // U+2556 (down D, left L) + { 0x00, 0x00, 0x00, 0x1F, 0x10, 0x17, 0x14, 0x14}, // U+2557 (down D, left D) + { 0x08, 0x08, 0x08, 0xF8, 0x08, 0xF8, 0x00, 0x00}, // U+2558 (up L, right D) + { 0x14, 0x14, 0x14, 0x14, 0xFC, 0x00, 0x00, 0x00}, // U+2559 (up D, right L) + { 0x14, 0x14, 0x14, 0xF4, 0x04, 0xFC, 0x00, 0x00}, // U+255A (up D, right D) + { 0x08, 0x08, 0x08, 0x0F, 0x08, 0x0F, 0x00, 0x00}, // U+255B (up L, left D) + { 0x14, 0x14, 0x14, 0x14, 0x1F, 0x00, 0x00, 0x00}, // U+255C (up D, left L) + { 0x14, 0x14, 0x14, 0x17, 0x10, 0x1F, 0x00, 0x00}, // U+255D (up D, left D) + { 0x08, 0x08, 0x08, 0xF8, 0x08, 0xF8, 0x08, 0x08}, // U+255E (up L, down L, right D) + { 0x14, 0x14, 0x14, 0x14, 0xF4, 0x14, 0x14, 0x14}, // U+255F (up D, down D, right L) + { 0x14, 0x14, 0x14, 0xF4, 0x04, 0xF4, 0x14, 0x14}, // U+2560 (up D, down D, right D) + { 0x08, 0x08, 0x08, 0x0F, 0x08, 0x0F, 0x08, 0x08}, // U+2561 (up L, down L, left D) + { 0x14, 0x14, 0x14, 0x14, 0x17, 0x14, 0x14, 0x14}, // U+2562 (up D, down D, left L) + { 0x14, 0x14, 0x14, 0x17, 0x10, 0x17, 0x14, 0x14}, // U+2563 (up D, down D, left D) + { 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x08, 0x08}, // U+2564 (left D, right D, down L) + { 0x00, 0x00, 0x00, 0x00, 0xFF, 0x14, 0x14, 0x14}, // U+2565 (left L, right L, down D) + { 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x14, 0x14}, // U+2566 (left D, right D, down D) + { 0x08, 0x08, 0x08, 0xFF, 0x00, 0xFF, 0x00, 0x00}, // U+2567 (left D, right D, up L) + { 0x14, 0x14, 0x14, 0x14, 0xFF, 0x00, 0x00, 0x00}, // U+2568 (left L, right L, up D) + { 0x14, 0x14, 0x14, 0xF7, 0x00, 0xFF, 0x00, 0x00}, // U+2569 (left D, right D, up D) + { 0x08, 0x08, 0x08, 0xFF, 0x08, 0xFF, 0x08, 0x08}, // U+256A (left D, right D, down L, up L) + { 0x14, 0x14, 0x14, 0x14, 0xFF, 0x14, 0x14, 0x14}, // U+256B (left L, right L, down D, up D) + { 0x14, 0x14, 0x14, 0xF7, 0x00, 0xF7, 0x14, 0x14}, // U+256C (left D, right D, down D, up D) + { 0x00, 0x00, 0x00, 0x00, 0xE0, 0x10, 0x08, 0x08}, // U+256D (curve down-right) + { 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x08}, // U+256E (curve down-left) + { 0x08, 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00}, // U+256F (curve up-left) + { 0x08, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x00, 0x00}, // U+2570 (curve up-right) + { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01}, // U+2571 (diagonal bottom-left to top-right) + { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}, // U+2572 (diagonal bottom-right to top-left) + { 0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81}, // U+2573 (diagonal cross) + { 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00}, // U+2574 (left L) + { 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00}, // U+2575 (up L) + { 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00}, // U+2576 (right L) + { 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08}, // U+2577 (down L) + { 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00}, // U+2578 (left H) + { 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, // U+2579 (up H) + { 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00}, // U+257A (right H) + { 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18}, // U+257B (down H) + { 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x00, 0x00, 0x00}, // U+257C (right H, left L) + { 0x08, 0x08, 0x08, 0x08, 0x18, 0x18, 0x18, 0x18}, // U+257D (up L, down H) + { 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00, 0x00, 0x00}, // U+257E (right L, left H) + { 0x18, 0x18, 0x18, 0x18, 0x08, 0x08, 0x08, 0x08} // U+257F (up H, down L) +}; diff --git a/fonts/dhepper-font8x8/font8x8_control.h b/fonts/dhepper-font8x8/font8x8_control.h new file mode 100644 index 0000000..179e654 --- /dev/null +++ b/fonts/dhepper-font8x8/font8x8_control.h @@ -0,0 +1,56 @@ +/** + * 8x8 monochrome bitmap fonts for rendering + * Author: Daniel Hepper + * + * License: Public Domain + * + * Based on: + * // Summary: font8x8.h + * // 8x8 monochrome bitmap fonts for rendering + * // + * // Author: + * // Marcel Sondaar + * // International Business Machines (public domain VGA fonts) + * // + * // License: + * // Public Domain + * + * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm + **/ + +// Constant: font8x8_0080 +// Contains an 8x8 font map for unicode points U+0080 - U+009F (C1/C2 control) +char font8x8_control[32][8] = { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0080 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0081 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0082 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0083 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0084 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0085 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0086 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0087 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0088 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0089 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+008A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+008B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+008C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+008D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+008E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+008F + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0090 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0091 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0092 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0093 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0094 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0095 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0096 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0097 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0098 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0099 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+009A + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+009B + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+009C + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+009D + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+009E + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+009F +}; diff --git a/fonts/dhepper-font8x8/font8x8_ext_latin.h b/fonts/dhepper-font8x8/font8x8_ext_latin.h new file mode 100644 index 0000000..75896a5 --- /dev/null +++ b/fonts/dhepper-font8x8/font8x8_ext_latin.h @@ -0,0 +1,120 @@ +/** + * 8x8 monochrome bitmap fonts for rendering + * Author: Daniel Hepper + * + * License: Public Domain + * + * Based on: + * // Summary: font8x8.h + * // 8x8 monochrome bitmap fonts for rendering + * // + * // Author: + * // Marcel Sondaar + * // International Business Machines (public domain VGA fonts) + * // + * // License: + * // Public Domain + * + * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm + **/ + +// Constant: font8x8_00A0 +// Contains an 8x8 font map for unicode points U+00A0 - U+00FF (extended latin) +char font8x8_ext_latin[96][8] = { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+00A0 (no break space) + { 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00}, // U+00A1 (inverted !) + { 0x18, 0x18, 0x7E, 0x03, 0x03, 0x7E, 0x18, 0x18}, // U+00A2 (dollarcents) + { 0x1C, 0x36, 0x26, 0x0F, 0x06, 0x67, 0x3F, 0x00}, // U+00A3 (pound sterling) + { 0x00, 0x00, 0x63, 0x3E, 0x36, 0x3E, 0x63, 0x00}, // U+00A4 (currency mark) + { 0x33, 0x33, 0x1E, 0x3F, 0x0C, 0x3F, 0x0C, 0x0C}, // U+00A5 (yen) + { 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+00A6 (broken pipe) + { 0x7C, 0xC6, 0x1C, 0x36, 0x36, 0x1C, 0x33, 0x1E}, // U+00A7 (paragraph) + { 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+00A8 (diaeresis) + { 0x3C, 0x42, 0x99, 0x85, 0x85, 0x99, 0x42, 0x3C}, // U+00A9 (copyright symbol) + { 0x3C, 0x36, 0x36, 0x7C, 0x00, 0x00, 0x00, 0x00}, // U+00AA (superscript a) + { 0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00}, // U+00AB (<<) + { 0x00, 0x00, 0x00, 0x3F, 0x30, 0x30, 0x00, 0x00}, // U+00AC (gun pointing left) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+00AD (soft hyphen) + { 0x3C, 0x42, 0x9D, 0xA5, 0x9D, 0xA5, 0x42, 0x3C}, // U+00AE (registered symbol) + { 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+00AF (macron) + { 0x1C, 0x36, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00}, // U+00B0 (degree) + { 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x7E, 0x00}, // U+00B1 (plusminus) + { 0x1C, 0x30, 0x18, 0x0C, 0x3C, 0x00, 0x00, 0x00}, // U+00B2 (superscript 2) + { 0x1C, 0x30, 0x18, 0x30, 0x1C, 0x00, 0x00, 0x00}, // U+00B2 (superscript 3) + { 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+00B2 (aigu) + { 0x00, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x06, 0x03}, // U+00B5 (mu) + { 0xFE, 0xDB, 0xDB, 0xDE, 0xD8, 0xD8, 0xD8, 0x00}, // U+00B6 (pilcrow) + { 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00}, // U+00B7 (central dot) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x30, 0x1E}, // U+00B8 (cedille) + { 0x08, 0x0C, 0x08, 0x1C, 0x00, 0x00, 0x00, 0x00}, // U+00B9 (superscript 1) + { 0x1C, 0x36, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00}, // U+00BA (superscript 0) + { 0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00}, // U+00BB (>>) + { 0xC3, 0x63, 0x33, 0xBD, 0xEC, 0xF6, 0xF3, 0x03}, // U+00BC (1/4) + { 0xC3, 0x63, 0x33, 0x7B, 0xCC, 0x66, 0x33, 0xF0}, // U+00BD (1/2) + { 0x03, 0xC4, 0x63, 0xB4, 0xDB, 0xAC, 0xE6, 0x80}, // U+00BE (3/4) + { 0x0C, 0x00, 0x0C, 0x06, 0x03, 0x33, 0x1E, 0x00}, // U+00BF (inverted ?) + { 0x07, 0x00, 0x1C, 0x36, 0x63, 0x7F, 0x63, 0x00}, // U+00C0 (A grave) + { 0x70, 0x00, 0x1C, 0x36, 0x63, 0x7F, 0x63, 0x00}, // U+00C1 (A aigu) + { 0x1C, 0x36, 0x00, 0x3E, 0x63, 0x7F, 0x63, 0x00}, // U+00C2 (A circumflex) + { 0x6E, 0x3B, 0x00, 0x3E, 0x63, 0x7F, 0x63, 0x00}, // U+00C3 (A ~) + { 0x63, 0x1C, 0x36, 0x63, 0x7F, 0x63, 0x63, 0x00}, // U+00C4 (A umlaut) + { 0x0C, 0x0C, 0x00, 0x1E, 0x33, 0x3F, 0x33, 0x00}, // U+00C5 (A ring) + { 0x7C, 0x36, 0x33, 0x7F, 0x33, 0x33, 0x73, 0x00}, // U+00C6 (AE) + { 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x18, 0x30, 0x1E}, // U+00C7 (C cedille) + { 0x07, 0x00, 0x3F, 0x06, 0x1E, 0x06, 0x3F, 0x00}, // U+00C8 (E grave) + { 0x38, 0x00, 0x3F, 0x06, 0x1E, 0x06, 0x3F, 0x00}, // U+00C9 (E aigu) + { 0x0C, 0x12, 0x3F, 0x06, 0x1E, 0x06, 0x3F, 0x00}, // U+00CA (E circumflex) + { 0x36, 0x00, 0x3F, 0x06, 0x1E, 0x06, 0x3F, 0x00}, // U+00CB (E umlaut) + { 0x07, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+00CC (I grave) + { 0x38, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+00CD (I aigu) + { 0x0C, 0x12, 0x00, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+00CE (I circumflex) + { 0x33, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+00CF (I umlaut) + { 0x3F, 0x66, 0x6F, 0x6F, 0x66, 0x66, 0x3F, 0x00}, // U+00D0 (Eth) + { 0x3F, 0x00, 0x33, 0x37, 0x3F, 0x3B, 0x33, 0x00}, // U+00D1 (N ~) + { 0x0E, 0x00, 0x18, 0x3C, 0x66, 0x3C, 0x18, 0x00}, // U+00D2 (O grave) + { 0x70, 0x00, 0x18, 0x3C, 0x66, 0x3C, 0x18, 0x00}, // U+00D3 (O aigu) + { 0x3C, 0x66, 0x18, 0x3C, 0x66, 0x3C, 0x18, 0x00}, // U+00D4 (O circumflex) + { 0x6E, 0x3B, 0x00, 0x3E, 0x63, 0x63, 0x3E, 0x00}, // U+00D5 (O ~) + { 0xC3, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x18, 0x00}, // U+00D6 (O umlaut) + { 0x00, 0x36, 0x1C, 0x08, 0x1C, 0x36, 0x00, 0x00}, // U+00D7 (multiplicative x) + { 0x5C, 0x36, 0x73, 0x7B, 0x6F, 0x36, 0x1D, 0x00}, // U+00D8 (O stroke) + { 0x0E, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, // U+00D9 (U grave) + { 0x70, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00}, // U+00DA (U aigu) + { 0x3C, 0x66, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x00}, // U+00DB (U circumflex) + { 0x33, 0x00, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+00DC (U umlaut) + { 0x70, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x00}, // U+00DD (Y aigu) + { 0x0F, 0x06, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+00DE (Thorn) + { 0x00, 0x1E, 0x33, 0x1F, 0x33, 0x1F, 0x03, 0x03}, // U+00DF (beta) + { 0x07, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x7E, 0x00}, // U+00E0 (a grave) + { 0x38, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x7E, 0x00}, // U+00E1 (a aigu) + { 0x7E, 0xC3, 0x3C, 0x60, 0x7C, 0x66, 0xFC, 0x00}, // U+00E2 (a circumflex) + { 0x6E, 0x3B, 0x1E, 0x30, 0x3E, 0x33, 0x7E, 0x00}, // U+00E3 (a ~) + { 0x33, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x7E, 0x00}, // U+00E4 (a umlaut) + { 0x0C, 0x0C, 0x1E, 0x30, 0x3E, 0x33, 0x7E, 0x00}, // U+00E5 (a ring) + { 0x00, 0x00, 0xFE, 0x30, 0xFE, 0x33, 0xFE, 0x00}, // U+00E6 (ae) + { 0x00, 0x00, 0x1E, 0x03, 0x03, 0x1E, 0x30, 0x1C}, // U+00E7 (c cedille) + { 0x07, 0x00, 0x1E, 0x33, 0x3F, 0x03, 0x1E, 0x00}, // U+00E8 (e grave) + { 0x38, 0x00, 0x1E, 0x33, 0x3F, 0x03, 0x1E, 0x00}, // U+00E9 (e aigu) + { 0x7E, 0xC3, 0x3C, 0x66, 0x7E, 0x06, 0x3C, 0x00}, // U+00EA (e circumflex) + { 0x33, 0x00, 0x1E, 0x33, 0x3F, 0x03, 0x1E, 0x00}, // U+00EB (e umlaut) + { 0x07, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+00EC (i grave) + { 0x1C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+00ED (i augu) + { 0x3E, 0x63, 0x1C, 0x18, 0x18, 0x18, 0x3C, 0x00}, // U+00EE (i circumflex) + { 0x33, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+00EF (i umlaut) + { 0x1B, 0x0E, 0x1B, 0x30, 0x3E, 0x33, 0x1E, 0x00}, // U+00F0 (eth) + { 0x00, 0x1F, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x00}, // U+00F1 (n ~) + { 0x00, 0x07, 0x00, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+00F2 (o grave) + { 0x00, 0x38, 0x00, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+00F3 (o aigu) + { 0x1E, 0x33, 0x00, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+00F4 (o circumflex) + { 0x6E, 0x3B, 0x00, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+00F5 (o ~) + { 0x00, 0x33, 0x00, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+00F6 (o umlaut) + { 0x18, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x18, 0x00}, // U+00F7 (division) + { 0x00, 0x60, 0x3C, 0x76, 0x7E, 0x6E, 0x3C, 0x06}, // U+00F8 (o stroke) + { 0x00, 0x07, 0x00, 0x33, 0x33, 0x33, 0x7E, 0x00}, // U+00F9 (u grave) + { 0x00, 0x38, 0x00, 0x33, 0x33, 0x33, 0x7E, 0x00}, // U+00FA (u aigu) + { 0x1E, 0x33, 0x00, 0x33, 0x33, 0x33, 0x7E, 0x00}, // U+00FB (u circumflex) + { 0x00, 0x33, 0x00, 0x33, 0x33, 0x33, 0x7E, 0x00}, // U+00FC (u umlaut) + { 0x00, 0x38, 0x00, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+00FD (y aigu) + { 0x00, 0x00, 0x06, 0x3E, 0x66, 0x3E, 0x06, 0x00}, // U+00FE (thorn) + { 0x00, 0x33, 0x00, 0x33, 0x33, 0x3E, 0x30, 0x1F} // U+00FF (y umlaut) +}; diff --git a/fonts/dhepper-font8x8/font8x8_greek.h b/fonts/dhepper-font8x8/font8x8_greek.h new file mode 100644 index 0000000..ea3a610 --- /dev/null +++ b/fonts/dhepper-font8x8/font8x8_greek.h @@ -0,0 +1,82 @@ +/** + * 8x8 monochrome bitmap fonts for rendering + * Author: Daniel Hepper + * + * License: Public Domain + * + * Based on: + * // Summary: font8x8.h + * // 8x8 monochrome bitmap fonts for rendering + * // + * // Author: + * // Marcel Sondaar + * // International Business Machines (public domain VGA fonts) + * // + * // License: + * // Public Domain + * + * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm + **/ + +// Constant: font8x8_0390 +// Contains an 8x8 font map for unicode points U+0390 - U+03C9 (greek characters) +char font8x8_greek[58][8] = { + { 0x2D, 0x00, 0x0C, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0390 (iota with tonos and diaeresis) + { 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0391 (Alpha) + { 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0392 (Beta) + { 0x3F, 0x33, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00}, // U+0393 (Gamma) + { 0x08, 0x1C, 0x1C, 0x36, 0x36, 0x63, 0x7F, 0x00}, // U+0394 (Delta) + { 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0395 (Epsilon) + { 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+0396 (Zeta) + { 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0397 (Eta) + { 0x1C, 0x36, 0x63, 0x7F, 0x63, 0x36, 0x1C, 0x00}, // U+0398 (Theta) + { 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0399 (Iota) + { 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+039A (Kappa) + { 0x08, 0x1C, 0x1C, 0x36, 0x36, 0x63, 0x63, 0x00}, // U+039B (Lambda) + { 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+039C (Mu) + { 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+039D (Nu) + { 0x7F, 0x63, 0x00, 0x3E, 0x00, 0x63, 0x7F, 0x00}, // U+039E (Xi) + { 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+039F (Omikron) + { 0x7F, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00}, // U+03A0 (Pi) + { 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+03A1 (Rho) + { 0x00, 0x01, 0x02, 0x04, 0x4F, 0x90, 0xA0, 0x40}, // U+03A2 + { 0x7F, 0x63, 0x06, 0x0C, 0x06, 0x63, 0x7F, 0x00}, // U+03A3 (Sigma 2) + { 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+03A4 (Tau) + { 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+03A5 (Upsilon) + { 0x18, 0x7E, 0xDB, 0xDB, 0xDB, 0x7E, 0x18, 0x00}, // U+03A6 (Phi) + { 0x63, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x63, 0x00}, // U+03A7 (Chi) + { 0xDB, 0xDB, 0xDB, 0x7E, 0x18, 0x18, 0x3C, 0x00}, // U+03A8 (Psi) + { 0x3E, 0x63, 0x63, 0x63, 0x36, 0x36, 0x77, 0x00}, // U+03A9 (Omega) + { 0x33, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0399 (Iota with diaeresis) + { 0x33, 0x00, 0x33, 0x33, 0x1E, 0x0C, 0x1E, 0x00}, // U+03A5 (Upsilon with diaeresis) + { 0x70, 0x00, 0x6E, 0x3B, 0x13, 0x3B, 0x6E, 0x00}, // U+03AC (alpha aigu) + { 0x38, 0x00, 0x1E, 0x03, 0x0E, 0x03, 0x1E, 0x00}, // U+03AD (epsilon aigu) + { 0x38, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x30}, // U+03AE (eta aigu) + { 0x38, 0x00, 0x0C, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+03AF (iota aigu) + { 0x2D, 0x00, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+03B0 (upsilon with tonos and diaeresis) + { 0x00, 0x00, 0x6E, 0x3B, 0x13, 0x3B, 0x6E, 0x00}, // U+03B1 (alpha) + { 0x00, 0x1E, 0x33, 0x1F, 0x33, 0x1F, 0x03, 0x03}, // U+03B2 (beta) + { 0x00, 0x00, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x00}, // U+03B3 (gamma) + { 0x38, 0x0C, 0x18, 0x3E, 0x33, 0x33, 0x1E, 0x00}, // U+03B4 (delta) + { 0x00, 0x00, 0x1E, 0x03, 0x0E, 0x03, 0x1E, 0x00}, // U+03B5 (epsilon) + { 0x00, 0x3F, 0x06, 0x03, 0x03, 0x1E, 0x30, 0x1C}, // U+03B6 (zeta) + { 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x30}, // U+03B7 (eta) + { 0x00, 0x00, 0x1E, 0x33, 0x3F, 0x33, 0x1E, 0x00}, // U+03B8 (theta) + { 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+03B9 (iota) + { 0x00, 0x00, 0x33, 0x1B, 0x0F, 0x1B, 0x33, 0x00}, // U+03BA (kappa) + { 0x00, 0x03, 0x06, 0x0C, 0x1C, 0x36, 0x63, 0x00}, // U+03BB (lambda) + { 0x00, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x06, 0x03}, // U+03BC (mu) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+03BD (nu) + { 0x1E, 0x03, 0x0E, 0x03, 0x03, 0x1E, 0x30, 0x1C}, // U+03BE (xi) + { 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+03BF (omikron) + { 0x00, 0x00, 0x7F, 0x36, 0x36, 0x36, 0x36, 0x00}, // U+03C0 (pi) + { 0x00, 0x00, 0x3C, 0x66, 0x66, 0x36, 0x06, 0x06}, // U+03C1 (rho) + { 0x00, 0x00, 0x3E, 0x03, 0x03, 0x1E, 0x30, 0x1C}, // U+03C2 (sigma 1) + { 0x00, 0x00, 0x7E, 0x1B, 0x1B, 0x1B, 0x0E, 0x00}, // U+03C3 (sigma 2) + { 0x00, 0x00, 0x7E, 0x18, 0x18, 0x58, 0x30, 0x00}, // U+03C4 (tau) + { 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+03C5 (upsilon) + { 0x00, 0x00, 0x76, 0xDB, 0xDB, 0x7E, 0x18, 0x00}, // U+03C6 (phi) + { 0x00, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+03C7 (chi) + { 0x00, 0x00, 0xDB, 0xDB, 0xDB, 0x7E, 0x18, 0x00}, // U+03C8 (psi) + { 0x00, 0x00, 0x36, 0x63, 0x6B, 0x7F, 0x36, 0x00} // U+03C9 (omega) +}; diff --git a/fonts/dhepper-font8x8/font8x8_hiragana.h b/fonts/dhepper-font8x8/font8x8_hiragana.h new file mode 100644 index 0000000..add4223 --- /dev/null +++ b/fonts/dhepper-font8x8/font8x8_hiragana.h @@ -0,0 +1,120 @@ +/** + * 8x8 monochrome bitmap fonts for rendering + * Author: Daniel Hepper + * + * License: Public Domain + * + * Based on: + * // Summary: font8x8.h + * // 8x8 monochrome bitmap fonts for rendering + * // + * // Author: + * // Marcel Sondaar + * // International Business Machines (public domain VGA fonts) + * // + * // License: + * // Public Domain + * + * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm + **/ + +// Contains an 8x8 font map for unicode points U+3040 - U+309F (Hiragana) +// Constant: font8x8_3040 +char font8x8_hiragana[96][8] = { + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+3040 + { 0x04, 0x3F, 0x04, 0x3C, 0x56, 0x4D, 0x26, 0x00}, // U+3041 (Hiragana a) + { 0x04, 0x3F, 0x04, 0x3C, 0x56, 0x4D, 0x26, 0x00}, // U+3042 (Hiragana A) + { 0x00, 0x00, 0x00, 0x11, 0x21, 0x25, 0x02, 0x00}, // U+3043 (Hiragana i) + { 0x00, 0x01, 0x11, 0x21, 0x21, 0x25, 0x02, 0x00}, // U+3044 (Hiragana I) + { 0x00, 0x1C, 0x00, 0x1C, 0x22, 0x20, 0x18, 0x00}, // U+3045 (Hiragana u) + { 0x3C, 0x00, 0x3C, 0x42, 0x40, 0x20, 0x18, 0x00}, // U+3046 (Hiragana U) + { 0x1C, 0x00, 0x3E, 0x10, 0x38, 0x24, 0x62, 0x00}, // U+3047 (Hiragana e) + { 0x1C, 0x00, 0x3E, 0x10, 0x38, 0x24, 0x62, 0x00}, // U+3048 (Hiragana E) + { 0x24, 0x4F, 0x04, 0x3C, 0x46, 0x45, 0x22, 0x00}, // U+3049 (Hiragana o) + { 0x24, 0x4F, 0x04, 0x3C, 0x46, 0x45, 0x22, 0x00}, // U+304A (Hiragana O) + { 0x04, 0x24, 0x4F, 0x54, 0x52, 0x12, 0x09, 0x00}, // U+304B (Hiragana KA) + { 0x44, 0x24, 0x0F, 0x54, 0x52, 0x52, 0x09, 0x00}, // U+304C (Hiragana GA) + { 0x08, 0x1F, 0x08, 0x3F, 0x1C, 0x02, 0x3C, 0x00}, // U+304D (Hiragana KI) + { 0x44, 0x2F, 0x04, 0x1F, 0x0E, 0x01, 0x1E, 0x00}, // U+304E (Hiragana GI) + { 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00}, // U+304F (Hiragana KU) + { 0x28, 0x44, 0x12, 0x21, 0x02, 0x04, 0x08, 0x00}, // U+3050 (Hiragana GU) + { 0x00, 0x22, 0x79, 0x21, 0x21, 0x22, 0x10, 0x00}, // U+3051 (Hiragana KE) + { 0x40, 0x22, 0x11, 0x3D, 0x11, 0x12, 0x08, 0x00}, // U+3052 (Hiragana GE) + { 0x00, 0x00, 0x3C, 0x00, 0x02, 0x02, 0x3C, 0x00}, // U+3053 (Hiragana KO) + { 0x20, 0x40, 0x16, 0x20, 0x01, 0x01, 0x0E, 0x00}, // U+3054 (Hiragana GO) + { 0x10, 0x7E, 0x10, 0x3C, 0x02, 0x02, 0x1C, 0x00}, // U+3055 (Hiragana SA) + { 0x24, 0x4F, 0x14, 0x2E, 0x01, 0x01, 0x0E, 0x00}, // U+3056 (Hiragana ZA) + { 0x00, 0x02, 0x02, 0x02, 0x42, 0x22, 0x1C, 0x00}, // U+3057 (Hiragana SI) + { 0x20, 0x42, 0x12, 0x22, 0x02, 0x22, 0x1C, 0x00}, // U+3058 (Hiragana ZI) + { 0x10, 0x7E, 0x18, 0x14, 0x18, 0x10, 0x0C, 0x00}, // U+3059 (Hiragana SU) + { 0x44, 0x2F, 0x06, 0x05, 0x06, 0x04, 0x03, 0x00}, // U+305A (Hiragana ZU) + { 0x20, 0x72, 0x2F, 0x22, 0x1A, 0x02, 0x1C, 0x00}, // U+305B (Hiragana SE) + { 0x80, 0x50, 0x3A, 0x17, 0x1A, 0x02, 0x1C, 0x00}, // U+305C (Hiragana ZE) + { 0x1E, 0x08, 0x04, 0x7F, 0x08, 0x04, 0x38, 0x00}, // U+305D (Hiragana SO) + { 0x4F, 0x24, 0x02, 0x7F, 0x08, 0x04, 0x38, 0x00}, // U+305E (Hiragana ZO) + { 0x02, 0x0F, 0x02, 0x72, 0x02, 0x09, 0x71, 0x00}, // U+305F (Hiragana TA) + { 0x42, 0x2F, 0x02, 0x72, 0x02, 0x09, 0x71, 0x00}, // U+3060 (Hiragana DA) + { 0x08, 0x7E, 0x08, 0x3C, 0x40, 0x40, 0x38, 0x00}, // U+3061 (Hiragana TI) + { 0x44, 0x2F, 0x04, 0x1E, 0x20, 0x20, 0x1C, 0x00}, // U+3062 (Hiragana DI) + { 0x00, 0x00, 0x00, 0x1C, 0x22, 0x20, 0x1C, 0x00}, // U+3063 (Hiragana tu) + { 0x00, 0x1C, 0x22, 0x41, 0x40, 0x20, 0x1C, 0x00}, // U+3064 (Hiragana TU) + { 0x40, 0x20, 0x1E, 0x21, 0x20, 0x20, 0x1C, 0x00}, // U+3065 (Hiragana DU) + { 0x00, 0x3E, 0x08, 0x04, 0x04, 0x04, 0x38, 0x00}, // U+3066 (Hiragana TE) + { 0x00, 0x3E, 0x48, 0x24, 0x04, 0x04, 0x38, 0x00}, // U+3067 (Hiragana DE) + { 0x04, 0x04, 0x08, 0x3C, 0x02, 0x02, 0x3C, 0x00}, // U+3068 (Hiragana TO) + { 0x44, 0x24, 0x08, 0x3C, 0x02, 0x02, 0x3C, 0x00}, // U+3069 (Hiragana DO) + { 0x32, 0x02, 0x27, 0x22, 0x72, 0x29, 0x11, 0x00}, // U+306A (Hiragana NA) + { 0x00, 0x02, 0x7A, 0x02, 0x0A, 0x72, 0x02, 0x00}, // U+306B (Hiragana NI) + { 0x08, 0x09, 0x3E, 0x4B, 0x65, 0x55, 0x22, 0x00}, // U+306C (Hiragana NU) + { 0x04, 0x07, 0x34, 0x4C, 0x66, 0x54, 0x24, 0x00}, // U+306D (Hiragana NE) + { 0x00, 0x00, 0x3C, 0x4A, 0x49, 0x45, 0x22, 0x00}, // U+306E (Hiragana NO) + { 0x00, 0x22, 0x7A, 0x22, 0x72, 0x2A, 0x12, 0x00}, // U+306F (Hiragana HA) + { 0x80, 0x51, 0x1D, 0x11, 0x39, 0x15, 0x09, 0x00}, // U+3070 (Hiragana BA) + { 0x40, 0xB1, 0x5D, 0x11, 0x39, 0x15, 0x09, 0x00}, // U+3071 (Hiragana PA) + { 0x00, 0x00, 0x13, 0x32, 0x51, 0x11, 0x0E, 0x00}, // U+3072 (Hiragana HI) + { 0x40, 0x20, 0x03, 0x32, 0x51, 0x11, 0x0E, 0x00}, // U+3073 (Hiragana BI) + { 0x40, 0xA0, 0x43, 0x32, 0x51, 0x11, 0x0E, 0x00}, // U+3074 (Hiragana PI) + { 0x1C, 0x00, 0x08, 0x2A, 0x49, 0x10, 0x0C, 0x00}, // U+3075 (Hiragana HU) + { 0x4C, 0x20, 0x08, 0x2A, 0x49, 0x10, 0x0C, 0x00}, // U+3076 (Hiragana BU) + { 0x4C, 0xA0, 0x48, 0x0A, 0x29, 0x48, 0x0C, 0x00}, // U+3077 (Hiragana PU) + { 0x00, 0x00, 0x04, 0x0A, 0x11, 0x20, 0x40, 0x00}, // U+3078 (Hiragana HE) + { 0x20, 0x40, 0x14, 0x2A, 0x11, 0x20, 0x40, 0x00}, // U+3079 (Hiragana BE) + { 0x20, 0x50, 0x24, 0x0A, 0x11, 0x20, 0x40, 0x00}, // U+307A (Hiragana PE) + { 0x7D, 0x11, 0x7D, 0x11, 0x39, 0x55, 0x09, 0x00}, // U+307B (Hiragana HO) + { 0x9D, 0x51, 0x1D, 0x11, 0x39, 0x55, 0x09, 0x00}, // U+307C (Hiragana BO) + { 0x5D, 0xB1, 0x5D, 0x11, 0x39, 0x55, 0x09, 0x00}, // U+307D (Hiragana PO) + { 0x7E, 0x08, 0x3E, 0x08, 0x1C, 0x2A, 0x04, 0x00}, // U+307E (Hiragana MA) + { 0x00, 0x07, 0x24, 0x24, 0x7E, 0x25, 0x12, 0x00}, // U+307F (Hiragana MI) + { 0x04, 0x0F, 0x64, 0x06, 0x05, 0x26, 0x3C, 0x00}, // U+3080 (Hiragana MU) + { 0x00, 0x09, 0x3D, 0x4A, 0x4B, 0x45, 0x2A, 0x00}, // U+3081 (Hiragana ME) + { 0x02, 0x0F, 0x02, 0x0F, 0x62, 0x42, 0x3C, 0x00}, // U+3082 (Hiragana MO) + { 0x00, 0x00, 0x12, 0x1F, 0x22, 0x12, 0x04, 0x00}, // U+3083 (Hiragana ya) + { 0x00, 0x12, 0x3F, 0x42, 0x42, 0x34, 0x04, 0x00}, // U+3084 (Hiragana YA) + { 0x00, 0x00, 0x11, 0x3D, 0x53, 0x39, 0x11, 0x00}, // U+3085 (Hiragana yu) + { 0x00, 0x11, 0x3D, 0x53, 0x51, 0x39, 0x11, 0x00}, // U+3086 (Hiragana YU) + { 0x00, 0x08, 0x38, 0x08, 0x1C, 0x2A, 0x04, 0x00}, // U+3087 (Hiragana yo) + { 0x08, 0x08, 0x38, 0x08, 0x1C, 0x2A, 0x04, 0x00}, // U+3088 (Hiragana YO) + { 0x1E, 0x00, 0x02, 0x3A, 0x46, 0x42, 0x30, 0x00}, // U+3089 (Hiragana RA) + { 0x00, 0x20, 0x22, 0x22, 0x2A, 0x24, 0x10, 0x00}, // U+308A (Hiragana RI) + { 0x1F, 0x08, 0x3C, 0x42, 0x49, 0x54, 0x38, 0x00}, // U+308B (Hiragana RU) + { 0x04, 0x07, 0x04, 0x0C, 0x16, 0x55, 0x24, 0x00}, // U+308C (Hiragana RE) + { 0x3F, 0x10, 0x08, 0x3C, 0x42, 0x41, 0x30, 0x00}, // U+308D (Hiragana RO) + { 0x00, 0x00, 0x08, 0x0E, 0x38, 0x4C, 0x2A, 0x00}, // U+308E (Hiragana wa) + { 0x04, 0x07, 0x04, 0x3C, 0x46, 0x45, 0x24, 0x00}, // U+308F (Hiragana WA) + { 0x0E, 0x08, 0x3C, 0x4A, 0x69, 0x55, 0x32, 0x00}, // U+3090 (Hiragana WI) + { 0x06, 0x3C, 0x42, 0x39, 0x04, 0x36, 0x49, 0x00}, // U+3091 (Hiragana WE) + { 0x04, 0x0F, 0x04, 0x6E, 0x11, 0x08, 0x70, 0x00}, // U+3092 (Hiragana WO) + { 0x08, 0x08, 0x04, 0x0C, 0x56, 0x52, 0x21, 0x00}, // U+3093 (Hiragana N) + { 0x40, 0x2E, 0x00, 0x3C, 0x42, 0x40, 0x38, 0x00}, // U+3094 (Hiragana VU) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+3095 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+3096 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+3097 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+3098 + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+3099 (voiced combinator mark) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+309A (semivoiced combinator mark) + { 0x40, 0x80, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00}, // U+309B (Hiragana voiced mark) + { 0x40, 0xA0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+309C (Hiragana semivoiced mark) + { 0x00, 0x00, 0x08, 0x08, 0x10, 0x30, 0x0C, 0x00}, // U+309D (Hiragana iteration mark) + { 0x20, 0x40, 0x14, 0x24, 0x08, 0x18, 0x06, 0x00}, // U+309E (Hiragana voiced iteration mark) + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+309F +}; diff --git a/fonts/dhepper-font8x8/font8x8_latin.h b/fonts/dhepper-font8x8/font8x8_latin.h new file mode 100644 index 0000000..d31fe92 --- /dev/null +++ b/fonts/dhepper-font8x8/font8x8_latin.h @@ -0,0 +1,23 @@ +/** + * 8x8 monochrome bitmap fonts for rendering + * Author: Daniel Hepper + * + * License: Public Domain + * + * Based on: + * // Summary: font8x8.h + * // 8x8 monochrome bitmap fonts for rendering + * // + * // Author: + * // Marcel Sondaar + * // International Business Machines (public domain VGA fonts) + * // + * // License: + * // Public Domain + * + * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm + **/ + +#include "font8x8_basic.h" +#include "font8x8_control.h" +#include "font8x8_ext_latin.h" diff --git a/fonts/dhepper-font8x8/font8x8_misc.h b/fonts/dhepper-font8x8/font8x8_misc.h new file mode 100644 index 0000000..5758224 --- /dev/null +++ b/fonts/dhepper-font8x8/font8x8_misc.h @@ -0,0 +1,33 @@ +/** + * 8x8 monochrome bitmap fonts for rendering + * Author: Daniel Hepper + * + * License: Public Domain + * + * Based on: + * // Summary: font8x8.h + * // 8x8 monochrome bitmap fonts for rendering + * // + * // Author: + * // Marcel Sondaar + * // International Business Machines (public domain VGA fonts) + * // + * // License: + * // Public Domain + * + * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm + **/ + +// for later use +char font8x8_misc[10][8] = { + { 0x1F, 0x33, 0x33, 0x5F, 0x63, 0xF3, 0x63, 0xE3}, // U+20A7 (Spanish Pesetas/Pt) + { 0x70, 0xD8, 0x18, 0x3C, 0x18, 0x18, 0x1B, 0x0E}, // U+0192 (dutch florijn) + { 0x3C, 0x36, 0x36, 0x7C, 0x00, 0x7E, 0x00, 0x00}, // U+ (underlined superscript a) + { 0x1C, 0x36, 0x36, 0x1C, 0x00, 0x3E, 0x00, 0x00}, // U+ (underlined superscript 0) + { 0x00, 0x00, 0x00, 0x3F, 0x03, 0x03, 0x00, 0x00}, // U+2310 (gun pointing right) + { 0x30, 0x18, 0x0C, 0x18, 0x30, 0x00, 0x7E, 0x00}, // U+ (less than or equal) + { 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x00, 0x7E, 0x00}, // U+ (greater than or equal) + { 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+ (grave) + { 0x0E, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x00}, // U+ (Y grave) + { 0x00, 0x07, 0x00, 0x33, 0x33, 0x3E, 0x30, 0x1F} // U+ (y grave) +}; diff --git a/fonts/dhepper-font8x8/font8x8_sga.h b/fonts/dhepper-font8x8/font8x8_sga.h new file mode 100644 index 0000000..13457da --- /dev/null +++ b/fonts/dhepper-font8x8/font8x8_sga.h @@ -0,0 +1,48 @@ +/** + * 8x8 monochrome bitmap fonts for rendering + * Author: Daniel Hepper + * + * License: Public Domain + * + * Based on: + * // Summary: font8x8.h + * // 8x8 monochrome bitmap fonts for rendering + * // + * // Author: + * // Marcel Sondaar + * // International Business Machines (public domain VGA fonts) + * // + * // License: + * // Public Domain + * + * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm + **/ + +char font8x8_sga[26][8] = { + { 0x00, 0x00, 0x38, 0x66, 0x06, 0x06, 0x07, 0x00}, // U+E541 (SGA A) + { 0x00, 0x00, 0x0C, 0x0C, 0x18, 0x30, 0x7F, 0x00}, // U+E542 (SGA B) + { 0x00, 0x00, 0x0C, 0x00, 0x0C, 0x30, 0x30, 0x00}, // U+E543 (SGA C) + { 0x00, 0x00, 0x7F, 0x00, 0x03, 0x1C, 0x60, 0x00}, // U+E544 (SGA D) + { 0x00, 0x00, 0x63, 0x03, 0x03, 0x03, 0x7F, 0x00}, // U+E545 (SGA E) + { 0x00, 0x00, 0x00, 0xFF, 0x00, 0xDB, 0x00, 0x00}, // U+E546 (SGA F) + { 0x00, 0x00, 0x30, 0x30, 0x3E, 0x30, 0x30, 0x00}, // U+E547 (SGA G) + { 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x18, 0x18, 0x00}, // U+E548 (SGA H) + { 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00}, // U+E549 (SGA I) + { 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x00}, // U+E54A (SGA J) + { 0x00, 0x00, 0x18, 0x18, 0x5A, 0x18, 0x18, 0x00}, // U+E54B (SGA K) + { 0x00, 0x00, 0x03, 0x33, 0x03, 0x33, 0x03, 0x00}, // U+E54C (SGA L) + { 0x00, 0x00, 0x63, 0x60, 0x60, 0x60, 0x7F, 0x00}, // U+E54D (SGA M) + { 0x00, 0x00, 0x66, 0x60, 0x30, 0x18, 0x0C, 0x00}, // U+E54E (SGA N) + { 0x00, 0x00, 0x3C, 0x60, 0x30, 0x18, 0x0C, 0x00}, // U+E54F (SGA O) + { 0x00, 0x00, 0x66, 0x60, 0x66, 0x06, 0x66, 0x00}, // U+E550 (SGA P) + { 0x00, 0x00, 0x18, 0x00, 0x7E, 0x60, 0x7E, 0x00}, // U+E551 (SGA Q) + { 0x00, 0x00, 0x00, 0x66, 0x00, 0x66, 0x00, 0x00}, // U+E552 (SGA R) + { 0x00, 0x00, 0x0C, 0x0C, 0x3C, 0x30, 0x30, 0x00}, // U+E553 (SGA S) + { 0x00, 0x00, 0x3C, 0x30, 0x30, 0x00, 0x30, 0x00}, // U+E554 (SGA T) + { 0x00, 0x00, 0x00, 0x36, 0x00, 0x7F, 0x00, 0x00}, // U+E555 (SGA U) + { 0x00, 0x00, 0x18, 0x18, 0x7E, 0x00, 0x7E, 0x00}, // U+E556 (SGA V) + { 0x00, 0x00, 0x00, 0x18, 0x00, 0x66, 0x00, 0x00}, // U+E557 (SGA W) + { 0x00, 0x00, 0x66, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+E558 (SGA X) + { 0x00, 0x00, 0x36, 0x36, 0x36, 0x36, 0x36, 0x00}, // U+E559 (SGA Y) + { 0x00, 0x00, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x00} // U+E55A (SGA Z) +}; diff --git a/fonts/dhepper-font8x8/render.c b/fonts/dhepper-font8x8/render.c new file mode 100644 index 0000000..a1143c7 --- /dev/null +++ b/fonts/dhepper-font8x8/render.c @@ -0,0 +1,39 @@ +#include +#include + +#include "font8x8_basic.h" + +void usage(char *exec) { + printf("Usage: %s \n", exec); + printf(" Decimal character code between 0 and 127\n"); +} + +void render(char *bitmap) { + int x,y; + int set; + int mask; + for (x=0; x < 8; x++) { + for (y=0; y < 8; y++) { + set = bitmap[x] & 1 << y; + printf("%c", set ? 'X' : ' '); + } + printf("\n"); + } +} + +int main(int argc, char **argv) { + int ord; + if (argc != 2) { + usage(argv[0]); + return 1; + } + ord = atoi(argv[1]); + if (ord > 127 || ord < 0) { + usage(argv[0]); + return 2; + } + char *bitmap = font8x8_basic[ord]; + + render(bitmap); + return 0; +}