Compare commits

...

6 commits

Author SHA1 Message Date
Brook Smith
bb386c8e71
Merge d4d937743a into a95d5559de 2024-11-21 12:53:46 +00:00
Gunch
a95d5559de
Merge pull request #164 from Zeal-Operating-System/zealbooter-updates
Some checks failed
Build ZealOS ISOs / Build (push) Has been cancelled
Update Zealbooter build system from Limine template
2024-10-04 02:21:08 -04:00
mintsuki
5bd76304ec Update Zealbooter build system from Limine template 2024-09-30 20:07:33 +02:00
Slapparoo
d4d937743a Correct font 2023-01-28 08:15:43 +13:00
Slapparoo
d1877cee89 Allow for different font sizes 2022-12-31 09:51:39 +13:00
Brook Smith
644076ec21
Merge pull request #1 from Zeal-Operating-System/master
ZealOS Updates
2022-12-23 07:33:28 +13:00
12 changed files with 923 additions and 212 deletions

View file

@ -44,9 +44,11 @@ I0 DrawScreenChar(I64 x, I64 y, I64 char)
{ {
I64 i, j; I64 i, j;
U8 *fontPointer = text.font(U8*) + (char & 0xFF) * FONT_HEIGHT;
for (i = 0; i < FONT_HEIGHT; i++) for (i = 0; i < FONT_HEIGHT; i++)
for (j = 0; j < FONT_WIDTH; j++) for (j = 0; j < FONT_WIDTH; j++)
if ((text.font[char] >> (i * 8)) & (1 << j)) if (Bt(fontPointer, i * FONT_WIDTH + j))
DrawScreenPixel(x + j, y + i, BLACK32); DrawScreenPixel(x + j, y + i, BLACK32);
} }

157
src/Demo/Graphics/FontEd_8x12.ZC Executable file
View file

@ -0,0 +1,157 @@
/*After making a font...
You can save it as a binary file with:
FileWrite("filename.BIN.Z",text.font,256*FONT_HEIGHT);
You can load it with:
U64 *my_font=FileRead("filename.BIN.Z");
text.aux_font=my_font;
<CTRL-ALT-f> will toggle main font and aux_font.
If you want to change the system font permanently,
save to a file with this font editor program
and cut and paste the code into $LK,"::/Kernel/FontStd.HC"$.
You will need to recompile Kernel by calling $LK,"BootHDIns",A="MN:BootHDIns"$().
See $LK,"::/Demo/ExtChars.HC"$, $LK,"::/Demo/Games/CharDemo.HC"$,
$LK,"::/Demo/Graphics/CharAnimation.HC"$ and $LK,"::/Demo/ScrnCodes.HC"$.
*/
#define BLOW_UP_CHAR_X (18*FONT_WIDTH)
#define BLOW_UP_CHAR_Y (4*FONT_HEIGHT)
U8 cur_ch;
U8 *fp = text.font;
U0 DrawIt(CTask *task,CDC *dc)
{
I64 i,j,k,c;
TextPrint(task,0,0,BLUE<<4+YELLOW,"Press <CTRL-ALT-f> to Toggle Aux Font.");
k=0;
for (i=0; i<16; i++)
for (j=0; j<16; j++) {
if (k == cur_ch) {
if (Blink)
c= (BLACK<<4+YELLOW) <<8 + k++;
else
c=(YELLOW<<4+BLACK)<<8 + k++;
} else
c=(BLUE<<4+WHITE)<<8 + k++;
TextChar(task,,j,i+2,c);
}
k=0;
for (i=0;i<FONT_HEIGHT;i++)
for (j=0;j<FONT_WIDTH;j++) {
if (Bt(&fp[cur_ch * FONT_HEIGHT],k++))
dc->color=YELLOW;
else
dc->color=GREEN;
GrRect(dc, BLOW_UP_CHAR_X + j * FONT_WIDTH,
BLOW_UP_CHAR_Y+i*FONT_HEIGHT,
FONT_WIDTH,FONT_HEIGHT);
}
}
U0 FESave(Bool pmt)
{
U8 old_draw_it=Fs->draw_it;
CDoc *doc=DocNew;
I64 i, j;
for (i=0;i<256;i++) {
for (j = 0; j < FONT_HEIGHT; j++) {
DocPrint(doc,"0x%02X,", fp[i * FONT_HEIGHT + j]);
}
if (Bt(char_bmp_safe_dollar,i))
DocPrint(doc,"//%c",i);
else if (i=='$$')
DocPrint(doc,"//$$$$",i);
DocPrint(doc,"\n");
}
Fs->draw_it=NULL;
DocWrite(doc,pmt);
Fs->draw_it=old_draw_it;
DocDel(doc);
}
U0 FontEd()
{
I64 msg_code,arg1,arg2,k;
SettingsPush; //See $LK,"SettingsPush",A="MN:SettingsPush"$
MenuPush(
"File {"
" SaveAs(,CH_CTRLA);"
" Abort(,CH_SHIFT_ESC);"
" Exit(,CH_ESC);"
"}");
AutoComplete;
DocCursor;
DocClear;
Fs->win_inhibit|=WIG_DBL_CLICK;
cur_ch=0;
try {
Fs->draw_it=&DrawIt;
while (TRUE) {
switch (msg_code=MessageGet(&arg1,&arg2,
1<<MESSAGE_KEY_DOWN|1<<MESSAGE_MS_L_DOWN|1<<MESSAGE_MS_R_DOWN|1<<MESSAGE_MS_MOVE)) {
case MESSAGE_KEY_DOWN:
switch (arg1) {
case 0:
switch (arg2.u8[0]) {
case SC_CURSOR_LEFT:
cur_ch--;
break;
case SC_CURSOR_RIGHT:
cur_ch++;
break;
case SC_CURSOR_UP:
cur_ch-=16;
break;
case SC_CURSOR_DOWN:
cur_ch+=16;
break;
}
break;
goto fe_done;
case CH_CTRLA:
FESave(TRUE);
break;
case CH_ESC:
FESave(FALSE);
case CH_SHIFT_ESC:
goto fe_done;
default:
cur_ch=arg1;
}
break;
case MESSAGE_MS_L_DOWN:
case MESSAGE_MS_R_DOWN:
if (0<=arg1<FONT_WIDTH *16 && 0<=arg2-2*FONT_HEIGHT<FONT_HEIGHT*16) {
cur_ch=(arg2/FONT_HEIGHT-2)*16+arg1/FONT_WIDTH;
break;
} //fall through
case MESSAGE_MS_MOVE:
k=((arg2-BLOW_UP_CHAR_Y)/FONT_HEIGHT)*FONT_WIDTH+
(arg1-BLOW_UP_CHAR_X)/FONT_WIDTH;
if (0 <= k < FONT_WIDTH*FONT_HEIGHT) {
if (mouse.lb||msg_code==MESSAGE_MS_L_DOWN)
Bts(&fp[cur_ch * FONT_HEIGHT],k);
if (mouse.rb||msg_code==MESSAGE_MS_R_DOWN)
Btr(&fp[cur_ch * FONT_HEIGHT],k);
}
break;
}
}
fe_done:
MessageGet(,,1<<MESSAGE_KEY_UP);
} catch
PutExcept;
MenuPop;
SettingsPop;
}
FontEd;

View file

@ -8,7 +8,9 @@ See also $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$().
*/ */
I64 i, row, col, x, y; I64 i, row, col, x, y;
U32 *framebuffer; U32 *framebuffer;
U64 ch_bitmap; U64 nextRow = FONT_WIDTH - 1,
rowInc = sys_framebuffer_width - FONT_WIDTH;
U8 *fontPointer = text.font(U8*) + (ch & 0xFF) * FONT_HEIGHT;
if (!(text.raw_flags & RAWF_SHOW_DOLLAR)) if (!(text.raw_flags & RAWF_SHOW_DOLLAR))
{ {
@ -69,20 +71,18 @@ See also $LK,"GrUpdateScreen",A="MN:GrUpdateScreen"$().
} }
x = col * FONT_WIDTH; x = col * FONT_WIDTH;
y = row * FONT_HEIGHT; y = row * FONT_HEIGHT;
ch_bitmap = text.font[ch & 0xFF];
framebuffer = text.fb_alias + sys_framebuffer_width * y + x; framebuffer = text.fb_alias + sys_framebuffer_width * y + x;
PUSHFD PUSHFD
CLI CLI
for (i = 0; i < FONT_WIDTH * FONT_HEIGHT; i++) for (i = 0; i < FONT_WIDTH * FONT_HEIGHT; i++)
{ {
if (ch_bitmap & 1) if (Bt(fontPointer, i))
*framebuffer++ = WHITE32; *framebuffer++ = WHITE32;
else else
*framebuffer++ = BLACK32; *framebuffer++ = BLACK32;
if (i & (FONT_WIDTH - 1) == FONT_WIDTH - 1) if (i & nextRow == nextRow)
framebuffer += sys_framebuffer_width - FONT_WIDTH; framebuffer += rowInc;
ch_bitmap >>= 1;
} }
POPFD POPFD
text.raw_col++; text.raw_col++;

661
src/Kernel/FontStd8x12.ZC Executable file
View file

@ -0,0 +1,661 @@
//See $LK,"::/Doc/Credits.DD"$.
/*
Initially created by extending the base system font with the following regex in VSC
- note the reverse order
find: 0x(.{2})(.{2})(.{2})(.{2})(.{2})(.{2})(.{2})(.{2})
replace: 0x00,0x00,0x$ER$7,0x$ER$5,0x$ER$3,0x$ER$1,0x00,0x00
the main alphabet '!' -> '~' charators have now been sampled from
// https://www.zap.org.au/projects/console-fonts-distributed/psftx-centos-7.5/lat0-12.psfu
*/
// 12 bytes per char
U8 sys_font_std_8x12[256*12]= {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x38,0x18,0x18,0x18,0x18,
0x00,0x00,0x00,0x00,0xF8,0x1C,0xCC,0xEC,0x6C,0x6C,0x6C,0x6C,
0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1C,0x18,0x18,0x18,0x18,
0x00,0x00,0x00,0x00,0x3F,0x70,0x67,0x6E,0x6C,0x6C,0x6C,0x6C,
0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0x00,0x00,0x00,0x00,0x00,
0x3C,0x3C,0x3C,0x7C,0xFC,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,
0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x00,0x00,0x00,0x00,0x00,
0x6C,0x6C,0x6C,0x6E,0x67,0x70,0x3F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,//
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//
0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,//!
0x00,0x6C,0x6C,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"
0x00,0x00,0x00,0x36,0x7F,0x36,0x36,0x36,0x7F,0x36,0x00,0x00,//#
0x00,0x08,0x3E,0x6B,0x0E,0x1C,0x38,0x6B,0x3E,0x08,0x00,0x00,//$$
0x00,0x00,0x00,0x46,0x66,0x30,0x18,0x0C,0x66,0x63,0x00,0x00,//%
0x00,0x1C,0x36,0x1C,0x1C,0x4E,0x7F,0x33,0x33,0x6E,0x00,0x00,//&
0x38,0x38,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//'
0x00,0x30,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x30,0x00,0x00,//(
0x00,0x0C,0x18,0x30,0x30,0x30,0x30,0x30,0x18,0x0C,0x00,0x00,//)
0x00,0x00,0x00,0x36,0x1C,0x7F,0x1C,0x36,0x00,0x00,0x00,0x00,//*
0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,//+
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x18,0x00,//,
0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,//-
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,//.
0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x03,0x00,0x00,0x00,///
0x00,0x3E,0x63,0x63,0x63,0x6B,0x63,0x63,0x63,0x3E,0x00,0x00,//0
0x00,0x18,0x1E,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,//1
0x00,0x3E,0x63,0x63,0x30,0x18,0x0C,0x06,0x63,0x7F,0x00,0x00,//2
0x00,0x3E,0x63,0x60,0x60,0x3C,0x60,0x60,0x63,0x3E,0x00,0x00,//3
0x00,0x30,0x38,0x3C,0x36,0x33,0x7F,0x30,0x30,0x30,0x00,0x00,//4
0x00,0x7F,0x03,0x03,0x03,0x3F,0x60,0x60,0x63,0x3E,0x00,0x00,//5
0x00,0x3E,0x63,0x03,0x03,0x3F,0x63,0x63,0x63,0x3E,0x00,0x00,//6
0x00,0x7F,0x63,0x30,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x00,0x00,//7
0x00,0x3E,0x63,0x63,0x63,0x3E,0x63,0x63,0x63,0x3E,0x00,0x00,//8
0x00,0x3E,0x63,0x63,0x63,0x7E,0x60,0x60,0x63,0x3E,0x00,0x00,//9
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//:
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x30,0x18,0x00,//;
0x00,0x30,0x18,0x0C,0x06,0x03,0x06,0x0C,0x18,0x30,0x00,0x00,//<
0x00,0x00,0x00,0x00,0x7F,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,//=
0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,//>
0x00,0x3E,0x63,0x63,0x30,0x18,0x18,0x00,0x18,0x18,0x00,0x00,//?
0x00,0x3E,0x63,0x63,0x7B,0x7B,0x7B,0x3B,0x03,0x7E,0x00,0x00,//@
0x00,0x1C,0x36,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x00,0x00,//A
0x00,0x3F,0x66,0x66,0x66,0x3E,0x66,0x66,0x66,0x3F,0x00,0x00,//B
0x00,0x3C,0x66,0x03,0x03,0x03,0x03,0x03,0x66,0x3C,0x00,0x00,//C
0x00,0x1F,0x36,0x66,0x66,0x66,0x66,0x66,0x36,0x1F,0x00,0x00,//D
0x00,0x7F,0x66,0x06,0x06,0x3E,0x06,0x06,0x66,0x7F,0x00,0x00,//E
0x00,0x7F,0x66,0x06,0x06,0x3E,0x06,0x06,0x06,0x0F,0x00,0x00,//F
0x00,0x3E,0x63,0x63,0x03,0x03,0x73,0x63,0x63,0x3E,0x00,0x00,//G
0x00,0x63,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x63,0x00,0x00,//H
0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,//I
0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x1B,0x1B,0x0E,0x00,0x00,//J
0x00,0x63,0x33,0x1B,0x0F,0x0F,0x1B,0x33,0x63,0x63,0x00,0x00,//K
0x00,0x0F,0x06,0x06,0x06,0x06,0x06,0x46,0x66,0x7F,0x00,0x00,//L
0x00,0x63,0x63,0x77,0x7F,0x6B,0x6B,0x6B,0x63,0x63,0x00,0x00,//M
0x00,0x63,0x63,0x67,0x67,0x6F,0x7B,0x73,0x73,0x63,0x00,0x00,//N
0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,//O
0x00,0x3F,0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x0F,0x00,0x00,//P
0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x63,0x6B,0x3E,0x60,0x00,//Q
0x00,0x3F,0x66,0x66,0x66,0x3E,0x1E,0x36,0x66,0x67,0x00,0x00,//R
0x00,0x3E,0x63,0x03,0x06,0x1C,0x30,0x60,0x63,0x3E,0x00,0x00,//S
0x00,0x7E,0x5A,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,//T
0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,//U
0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x08,0x00,0x00,//V
0x00,0x63,0x63,0x6B,0x6B,0x6B,0x7F,0x77,0x63,0x63,0x00,0x00,//W
0x00,0x63,0x63,0x36,0x1C,0x1C,0x1C,0x36,0x63,0x63,0x00,0x00,//X
0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x3C,0x00,0x00,//Y
0x00,0x7F,0x63,0x31,0x18,0x0C,0x06,0x43,0x63,0x7F,0x00,0x00,//Z
0x00,0x3E,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x3E,0x00,0x00,//[
0x00,0x00,0x00,0x03,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,//\
0x00,0x3E,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3E,0x00,0x00,//]
0x00,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,//_
0x38,0x38,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//`
0x00,0x00,0x00,0x00,0x1E,0x30,0x3E,0x33,0x3B,0x6E,0x00,0x00,//a
0x00,0x07,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x3F,0x00,0x00,//b
0x00,0x00,0x00,0x00,0x3E,0x63,0x03,0x03,0x63,0x3E,0x00,0x00,//c
0x00,0x38,0x30,0x30,0x3E,0x33,0x33,0x33,0x33,0x7E,0x00,0x00,//d
0x00,0x00,0x00,0x00,0x3E,0x63,0x7F,0x03,0x63,0x3E,0x00,0x00,//e
0x00,0x38,0x6C,0x0C,0x0C,0x3F,0x0C,0x0C,0x0C,0x1E,0x00,0x00,//f
0x00,0x00,0x00,0x00,0x6E,0x73,0x63,0x63,0x7E,0x60,0x63,0x3E,//g
0x00,0x07,0x06,0x06,0x36,0x6E,0x66,0x66,0x66,0x67,0x00,0x00,//h
0x00,0x18,0x18,0x00,0x1C,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,//i
0x00,0x00,0x30,0x30,0x00,0x38,0x30,0x30,0x30,0x33,0x33,0x1E,//j
0x00,0x07,0x06,0x06,0x66,0x36,0x1E,0x36,0x66,0x67,0x00,0x00,//k
0x00,0x0E,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x2C,0x18,0x00,0x00,//l
0x00,0x00,0x00,0x00,0x36,0x7F,0x6B,0x6B,0x63,0x63,0x00,0x00,//m
0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x66,0x66,0x00,0x00,//n
0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,//o
0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x3E,0x06,0x06,0x0F,//p
0x00,0x00,0x00,0x00,0x6E,0x33,0x33,0x33,0x3E,0x30,0x30,0x78,//q
0x00,0x00,0x00,0x00,0x3B,0x66,0x06,0x06,0x06,0x0F,0x00,0x00,//r
0x00,0x00,0x00,0x00,0x3E,0x63,0x0E,0x38,0x63,0x3E,0x00,0x00,//s
0x00,0x0C,0x0C,0x0C,0x3F,0x0C,0x0C,0x0C,0x6C,0x38,0x00,0x00,//t
0x00,0x00,0x00,0x00,0x33,0x33,0x33,0x33,0x33,0x6E,0x00,0x00,//u
0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x36,0x1C,0x08,0x00,0x00,//v
0x00,0x00,0x00,0x00,0x63,0x63,0x6B,0x6B,0x7F,0x36,0x00,0x00,//w
0x00,0x00,0x00,0x00,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00,0x00,//x
0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x73,0x6E,0x60,0x63,0x3E,//y
0x00,0x00,0x00,0x00,0x7F,0x31,0x18,0x0C,0x46,0x7F,0x00,0x00,//z
0x00,0x70,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x70,0x00,0x00,//{
0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,//|
0x00,0x0E,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x0E,0x00,0x00,//}
0x00,0x6E,0x3B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~
0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x1E,0x33,0x03,0x33,0x1E,0x18,0x30,0x1E,0x00,0x00,//€
0x00,0x00,0x00,0x33,0x00,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,//<2F>
0x00,0x00,0x38,0x00,0x1E,0x33,0x3F,0x03,0x1E,0x00,0x00,0x00,//
0x00,0x00,0x7E,0xC3,0x3C,0x60,0x7C,0x66,0xFC,0x00,0x00,0x00,//ƒ
0x00,0x00,0x33,0x00,0x1E,0x30,0x3E,0x33,0x7E,0x00,0x00,0x00,//„
0x00,0x00,0x07,0x00,0x1E,0x30,0x3E,0x33,0x7E,0x00,0x00,0x00,//…
0x00,0x00,0x0C,0x0C,0x1E,0x30,0x3E,0x33,0x7E,0x00,0x00,0x00,//†
0x00,0x00,0x00,0x00,0x3E,0x03,0x03,0x3E,0x60,0x3C,0x00,0x00,//‡
0x00,0x00,0x7E,0xC3,0x3C,0x66,0x7E,0x06,0x3C,0x00,0x00,0x00,//ˆ
0x00,0x00,0x33,0x00,0x1E,0x33,0x3F,0x03,0x1E,0x00,0x00,0x00,//‰
0x00,0x00,0x07,0x00,0x1E,0x33,0x3F,0x03,0x1E,0x00,0x00,0x00,//Š
0x00,0x00,0x33,0x00,0x0E,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,//
0x00,0x00,0x3E,0x63,0x1C,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,//Œ
0x00,0x00,0x07,0x00,0x0E,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,//<2F>
0x00,0x00,0x33,0x0C,0x1E,0x33,0x33,0x3F,0x33,0x00,0x00,0x00,//Ž
0x00,0x00,0x0C,0x0C,0x00,0x1E,0x33,0x3F,0x33,0x00,0x00,0x00,//<2F>
0x00,0x00,0x38,0x00,0x3F,0x06,0x1E,0x06,0x3F,0x00,0x00,0x00,//<2F>
0x00,0x00,0x00,0x00,0xFE,0x30,0xFE,0x33,0xFE,0x00,0x00,0x00,//
0x00,0x00,0x7C,0x36,0x33,0x7F,0x33,0x33,0x73,0x00,0x00,0x00,//
0x00,0x00,0x1E,0x33,0x00,0x1E,0x33,0x33,0x1E,0x00,0x00,0x00,//“
0x00,0x00,0x00,0x33,0x00,0x1E,0x33,0x33,0x1E,0x00,0x00,0x00,//”
0x00,0x00,0x00,0x07,0x00,0x1E,0x33,0x33,0x1E,0x00,0x00,0x00,//•
0x00,0x00,0x1E,0x33,0x00,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,//
0x00,0x00,0x00,0x07,0x00,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,//—
0x00,0x00,0x00,0x33,0x00,0x33,0x33,0x3F,0x30,0x1F,0x00,0x00,//˜
0x00,0x00,0x63,0x1C,0x3E,0x63,0x63,0x3E,0x1C,0x00,0x00,0x00,//™
0x00,0x00,0x33,0x00,0x33,0x33,0x33,0x33,0x1E,0x00,0x00,0x00,//š
0x00,0x00,0x18,0x18,0x7E,0x03,0x03,0x7E,0x18,0x18,0x00,0x00,//
0x00,0x00,0x1C,0x36,0x26,0x0F,0x06,0x67,0x3F,0x00,0x00,0x00,//œ
0x00,0x00,0x33,0x33,0x1E,0x3F,0x0C,0x3F,0x0C,0x00,0x00,0x00,//<2F>
0x00,0x00,0x0F,0x1B,0x1B,0x2F,0x33,0x7B,0x33,0x70,0x00,0x00,//ž
0x00,0x00,0x70,0xD8,0x18,0x7E,0x18,0x18,0x1B,0x0E,0x00,0x00,//Ÿ
0x00,0x00,0x38,0x00,0x1E,0x30,0x3E,0x33,0x7E,0x00,0x00,0x00,// 
0x00,0x00,0x1C,0x00,0x0E,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,//¡
0x00,0x00,0x00,0x38,0x00,0x1E,0x33,0x33,0x1E,0x00,0x00,0x00,//¢
0x00,0x00,0x00,0x38,0x00,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,//£
0x00,0x00,0x00,0x1F,0x00,0x1F,0x33,0x33,0x33,0x00,0x00,0x00,//¤
0x00,0x00,0x3F,0x00,0x33,0x37,0x3F,0x3B,0x33,0x00,0x00,0x00,//¥
0x00,0x00,0x3C,0x36,0x36,0x7C,0x00,0x7E,0x00,0x00,0x00,0x00,//¦
0x00,0x00,0x3C,0x66,0x66,0x3C,0x00,0x7E,0x00,0x00,0x00,0x00,//§
0x00,0x00,0x0C,0x00,0x0C,0x06,0x03,0x33,0x1E,0x00,0x00,0x00,//¨
0x00,0x00,0x00,0x00,0x00,0x3F,0x03,0x03,0x00,0x00,0x00,0x00,//©
0x00,0x00,0x00,0x00,0x00,0x3F,0x30,0x30,0x00,0x00,0x00,0x00,//ª
0x00,0x00,0x63,0x33,0x1B,0x7C,0xC6,0x73,0x19,0xF8,0x00,0x00,//«
0x00,0x00,0x63,0x33,0x1B,0xCF,0xE6,0xF3,0xF9,0xC0,0x00,0x00,//¬
0x00,0x00,0x00,0x18,0x00,0x18,0x18,0x3C,0x3C,0x18,0x00,0x00,//­
0x00,0x00,0x00,0xCC,0x66,0x33,0x66,0xCC,0x00,0x00,0x00,0x00,//®
0x00,0x00,0x00,0x33,0x66,0xCC,0x66,0x33,0x00,0x00,0x00,0x00,//¯
0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,//°
0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,//±
0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,//²
0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,//³
0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,//´
0x18,0x18,0x18,0x18,0x1F,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,//µ
0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6F,0x6C,0x6C,0x6C,0x6C,0x6C,//¶
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x7C,0x6C,0x6C,0x6C,0x6C,//·
0x00,0x00,0x00,0x00,0x0F,0x1C,0x1F,0x18,0x18,0x18,0x18,0x18,//¸
0x6C,0x6C,0x6C,0x6C,0x67,0x60,0x67,0x6C,0x6C,0x6C,0x6C,0x6C,//¹
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,//º
0x3F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//»
0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF8,0xFF,0xFF,0x7F,0x3F,//¼
0x6C,0x6C,0x6C,0x6C,0x6C,0x7C,0x3F,0x00,0x00,0x00,0x00,0x00,//½
0x18,0x18,0x18,0x18,0x1F,0x1C,0x0F,0x00,0x00,0x00,0x00,0x00,//¾
0x00,0x3F,0x7F,0x70,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,//¿
0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0xFE,0xFC,0x00,//À
0x00,0x00,0x18,0x18,0x18,0x18,0xFF,0x00,0x00,0x00,0x00,0x00,//Á
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,//Â
0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,//Ã
0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//Ä
0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x18,0x18,//Å
0x18,0x18,0x18,0x38,0xD8,0x18,0xD8,0x38,0x18,0x18,0x18,0x18,//Æ
0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0xEC,0x6C,0x6C,0x6C,0x6C,0x6C,//Ç
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x1F,0xFF,0xFF,0xFE,0xFC,//È
0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//É
0x00,0x00,0x6C,0x6C,0xEF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,//Ê
0x00,0x00,0x00,0x00,0xFF,0x00,0xEF,0x6C,0x6C,0x6C,0x00,0x00,//Ë
0x00,0x00,0x6C,0x6C,0xEC,0x0C,0xEC,0x6C,0x6C,0x6C,0x00,0x00,//Ì
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//Í
0x6C,0x6C,0x6C,0x6C,0xEF,0x00,0xEF,0x6C,0x6C,0x6C,0x6C,0x6C,//Î
0x18,0x18,0x18,0x18,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,//Ï
0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0xFF,0x00,0x00,0x00,0x00,0x00,//Ð
0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,//Ñ
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x6C,0x6C,0x6C,0x6C,0x6C,//Ò
0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0xFC,0x00,0x00,0x00,0x00,0x00,//Ó
0x18,0x18,0x18,0x18,0xF8,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,//Ô
0x00,0x00,0x00,0x00,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,//Õ
0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x6C,0x6C,0x6C,0x6C,0x6C,//Ö
0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0xEF,0x6C,0x6C,0x6C,0x6C,0x6C,//×
0x18,0x18,0x18,0x18,0xFF,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,//Ø
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x70,0x7F,0x3F,0x00,//Ù
0x00,0xFC,0xFE,0x0E,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,//Ú
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//Û
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//Ü
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,//Ý
0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,//Þ
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,//ß
0x00,0x00,0x00,0x00,0x6E,0x3B,0x13,0x3B,0x6E,0x00,0x00,0x00,//à
0x00,0x00,0x00,0x1E,0x33,0x1F,0x33,0x1F,0x03,0x03,0x00,0x00,//á
0x00,0x00,0x00,0x7F,0x63,0x03,0x03,0x03,0x03,0x00,0x00,0x00,//â
0x00,0x00,0x00,0x7F,0x36,0x36,0x36,0x36,0x36,0x00,0x00,0x00,//ã
0x00,0x00,0x7F,0x66,0x0C,0x18,0x0C,0x66,0x7F,0x00,0x00,0x00,//ä
0x00,0x00,0x00,0x00,0x7E,0x33,0x33,0x33,0x1E,0x00,0x00,0x00,//å
0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3E,0x06,0x03,0x00,0x00,//æ
0x00,0x00,0x00,0x6E,0x3B,0x18,0x18,0x18,0x18,0x00,0x00,0x00,//ç
0x00,0x00,0x3F,0x0C,0x1E,0x33,0x33,0x1E,0x0C,0x3F,0x00,0x00,//è
0x00,0x00,0x1C,0x36,0x63,0x7F,0x63,0x36,0x1C,0x00,0x00,0x00,//é
0x00,0x00,0x1C,0x36,0x63,0x63,0x36,0x36,0x77,0x00,0x00,0x00,//ê
0x00,0x00,0x38,0x0C,0x18,0x3E,0x33,0x33,0x1E,0x00,0x00,0x00,//ë
0x00,0x00,0x00,0x00,0x7E,0xDB,0xDB,0x7E,0x00,0x00,0x00,0x00,//ì
0x00,0x00,0x60,0x30,0x7E,0xDB,0xDB,0x7E,0x06,0x03,0x00,0x00,//í
0x00,0x00,0x3C,0x06,0x03,0x3F,0x03,0x06,0x3C,0x00,0x00,0x00,//î
0x00,0x00,0x1E,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00,//ï
0x00,0x00,0x00,0x3F,0x00,0x3F,0x00,0x3F,0x00,0x00,0x00,0x00,//ð
0x00,0x00,0x0C,0x0C,0x3F,0x0C,0x0C,0x00,0x3F,0x00,0x00,0x00,//ñ
0x00,0x00,0x06,0x0C,0x18,0x0C,0x06,0x00,0x3F,0x00,0x00,0x00,//ò
0x00,0x00,0x18,0x0C,0x06,0x0C,0x18,0x00,0x3F,0x00,0x00,0x00,//ó
0x00,0x00,0x70,0xD8,0xD8,0x18,0x18,0x18,0x18,0x18,0x00,0x00,//ô
0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x1B,0x1B,0x1E,0x0C,0x00,//õ
0x00,0x00,0x0C,0x0C,0x00,0x3F,0x00,0x0C,0x0C,0x00,0x00,0x00,//ö
0x00,0x00,0x00,0x4E,0x39,0x00,0x4E,0x39,0x00,0x00,0x00,0x00,//÷
0x00,0x00,0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,//ø
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,//ù
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,//ú
0x00,0x00,0xF0,0x30,0x30,0x30,0x37,0x36,0x3C,0x38,0x30,0x00,//û
0x00,0x00,0x1E,0x36,0x36,0x36,0x36,0x00,0x00,0x00,0x00,0x00,//ü
0x00,0x00,0x1E,0x30,0x1C,0x06,0x3E,0x00,0x00,0x00,0x00,0x00,//ý
0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,//þ
0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,//ÿ
};
// https://www.zap.org.au/projects/console-fonts-distributed/psftx-centos-7.5/lat0-12.psfu
U8 sys_font_lat0_8x12[256*12]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,
0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,
0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,
0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x38,0x18,0x18,0x18,0x18,
0x00,0x00,0x00,0x00,0xF8,0x1C,0xCC,0xEC,0x6C,0x6C,0x6C,0x6C,
0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x1C,0x18,0x18,0x18,0x18,
0x00,0x00,0x00,0x00,0x3F,0x70,0x67,0x6E,0x6C,0x6C,0x6C,0x6C,
0x18,0x18,0x18,0x18,0x18,0x38,0xF0,0x00,0x00,0x00,0x00,0x00,
0x3C,0x3C,0x3C,0x7C,0xFC,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,
0x18,0x18,0x18,0x18,0x18,0x1C,0x0F,0x00,0x00,0x00,0x00,0x00,
0x6C,0x6C,0x6C,0x6E,0x67,0x70,0x3F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,//
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//
0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x00,0x18,0x18,0x00,0x00,//!
0x00,0x6C,0x6C,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"
0x00,0x00,0x00,0x36,0x7F,0x36,0x36,0x36,0x7F,0x36,0x00,0x00,//#
0x00,0x08,0x3E,0x6B,0x0E,0x1C,0x38,0x6B,0x3E,0x08,0x00,0x00,//$$
0x00,0x00,0x00,0x46,0x66,0x30,0x18,0x0C,0x66,0x63,0x00,0x00,//%
0x00,0x1C,0x36,0x1C,0x1C,0x4E,0x7F,0x33,0x33,0x6E,0x00,0x00,//&
0x38,0x38,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//'
0x00,0x30,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x18,0x30,0x00,0x00,//(
0x00,0x0C,0x18,0x30,0x30,0x30,0x30,0x30,0x18,0x0C,0x00,0x00,//)
0x00,0x00,0x00,0x36,0x1C,0x7F,0x1C,0x36,0x00,0x00,0x00,0x00,//*
0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,//+
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x18,0x00,//,
0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,//-
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,//.
0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x03,0x00,0x00,0x00,///
0x00,0x3E,0x63,0x63,0x63,0x6B,0x63,0x63,0x63,0x3E,0x00,0x00,//0
0x00,0x18,0x1E,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,//1
0x00,0x3E,0x63,0x63,0x30,0x18,0x0C,0x06,0x63,0x7F,0x00,0x00,//2
0x00,0x3E,0x63,0x60,0x60,0x3C,0x60,0x60,0x63,0x3E,0x00,0x00,//3
0x00,0x30,0x38,0x3C,0x36,0x33,0x7F,0x30,0x30,0x30,0x00,0x00,//4
0x00,0x7F,0x03,0x03,0x03,0x3F,0x60,0x60,0x63,0x3E,0x00,0x00,//5
0x00,0x3E,0x63,0x03,0x03,0x3F,0x63,0x63,0x63,0x3E,0x00,0x00,//6
0x00,0x7F,0x63,0x30,0x18,0x0C,0x0C,0x0C,0x0C,0x0C,0x00,0x00,//7
0x00,0x3E,0x63,0x63,0x63,0x3E,0x63,0x63,0x63,0x3E,0x00,0x00,//8
0x00,0x3E,0x63,0x63,0x63,0x7E,0x60,0x60,0x63,0x3E,0x00,0x00,//9
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//:
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x30,0x18,0x00,//;
0x00,0x30,0x18,0x0C,0x06,0x03,0x06,0x0C,0x18,0x30,0x00,0x00,//<
0x00,0x00,0x00,0x00,0x7F,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,//=
0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,//>
0x00,0x3E,0x63,0x63,0x30,0x18,0x18,0x00,0x18,0x18,0x00,0x00,//?
0x00,0x3E,0x63,0x63,0x7B,0x7B,0x7B,0x3B,0x03,0x7E,0x00,0x00,//@
0x00,0x1C,0x36,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x00,0x00,//A
0x00,0x3F,0x66,0x66,0x66,0x3E,0x66,0x66,0x66,0x3F,0x00,0x00,//B
0x00,0x3C,0x66,0x03,0x03,0x03,0x03,0x03,0x66,0x3C,0x00,0x00,//C
0x00,0x1F,0x36,0x66,0x66,0x66,0x66,0x66,0x36,0x1F,0x00,0x00,//D
0x00,0x7F,0x66,0x06,0x06,0x3E,0x06,0x06,0x66,0x7F,0x00,0x00,//E
0x00,0x7F,0x66,0x06,0x06,0x3E,0x06,0x06,0x06,0x0F,0x00,0x00,//F
0x00,0x3E,0x63,0x63,0x03,0x03,0x73,0x63,0x63,0x3E,0x00,0x00,//G
0x00,0x63,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x63,0x00,0x00,//H
0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,//I
0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x1B,0x1B,0x0E,0x00,0x00,//J
0x00,0x63,0x33,0x1B,0x0F,0x0F,0x1B,0x33,0x63,0x63,0x00,0x00,//K
0x00,0x0F,0x06,0x06,0x06,0x06,0x06,0x46,0x66,0x7F,0x00,0x00,//L
0x00,0x63,0x63,0x77,0x7F,0x6B,0x6B,0x6B,0x63,0x63,0x00,0x00,//M
0x00,0x63,0x63,0x67,0x67,0x6F,0x7B,0x73,0x73,0x63,0x00,0x00,//N
0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,//O
0x00,0x3F,0x66,0x66,0x66,0x3E,0x06,0x06,0x06,0x0F,0x00,0x00,//P
0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x63,0x6B,0x3E,0x60,0x00,//Q
0x00,0x3F,0x66,0x66,0x66,0x3E,0x1E,0x36,0x66,0x67,0x00,0x00,//R
0x00,0x3E,0x63,0x03,0x06,0x1C,0x30,0x60,0x63,0x3E,0x00,0x00,//S
0x00,0x7E,0x5A,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,//T
0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,//U
0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x08,0x00,0x00,//V
0x00,0x63,0x63,0x6B,0x6B,0x6B,0x7F,0x77,0x63,0x63,0x00,0x00,//W
0x00,0x63,0x63,0x36,0x1C,0x1C,0x1C,0x36,0x63,0x63,0x00,0x00,//X
0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x3C,0x00,0x00,//Y
0x00,0x7F,0x63,0x31,0x18,0x0C,0x06,0x43,0x63,0x7F,0x00,0x00,//Z
0x00,0x3E,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x3E,0x00,0x00,//[
0x00,0x00,0x00,0x03,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,//\
0x00,0x3E,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3E,0x00,0x00,//]
0x00,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,//_
0x38,0x38,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//`
0x00,0x00,0x00,0x00,0x1E,0x30,0x3E,0x33,0x3B,0x6E,0x00,0x00,//a
0x00,0x07,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x3F,0x00,0x00,//b
0x00,0x00,0x00,0x00,0x3E,0x63,0x03,0x03,0x63,0x3E,0x00,0x00,//c
0x00,0x38,0x30,0x30,0x3E,0x33,0x33,0x33,0x33,0x7E,0x00,0x00,//d
0x00,0x00,0x00,0x00,0x3E,0x63,0x7F,0x03,0x63,0x3E,0x00,0x00,//e
0x00,0x38,0x6C,0x0C,0x0C,0x3F,0x0C,0x0C,0x0C,0x1E,0x00,0x00,//f
0x00,0x00,0x00,0x00,0x6E,0x73,0x63,0x63,0x7E,0x60,0x63,0x3E,//g
0x00,0x07,0x06,0x06,0x36,0x6E,0x66,0x66,0x66,0x67,0x00,0x00,//h
0x00,0x18,0x18,0x00,0x1C,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,//i
0x00,0x00,0x30,0x30,0x00,0x38,0x30,0x30,0x30,0x33,0x33,0x1E,//j
0x00,0x07,0x06,0x06,0x66,0x36,0x1E,0x36,0x66,0x67,0x00,0x00,//k
0x00,0x0E,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x2C,0x18,0x00,0x00,//l
0x00,0x00,0x00,0x00,0x36,0x7F,0x6B,0x6B,0x63,0x63,0x00,0x00,//m
0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x66,0x66,0x00,0x00,//n
0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,//o
0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x3E,0x06,0x06,0x0F,//p
0x00,0x00,0x00,0x00,0x6E,0x33,0x33,0x33,0x3E,0x30,0x30,0x78,//q
0x00,0x00,0x00,0x00,0x3B,0x66,0x06,0x06,0x06,0x0F,0x00,0x00,//r
0x00,0x00,0x00,0x00,0x3E,0x63,0x0E,0x38,0x63,0x3E,0x00,0x00,//s
0x00,0x0C,0x0C,0x0C,0x3F,0x0C,0x0C,0x0C,0x6C,0x38,0x00,0x00,//t
0x00,0x00,0x00,0x00,0x33,0x33,0x33,0x33,0x33,0x6E,0x00,0x00,//u
0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x36,0x1C,0x08,0x00,0x00,//v
0x00,0x00,0x00,0x00,0x63,0x63,0x6B,0x6B,0x7F,0x36,0x00,0x00,//w
0x00,0x00,0x00,0x00,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00,0x00,//x
0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x73,0x6E,0x60,0x63,0x3E,//y
0x00,0x00,0x00,0x00,0x7F,0x31,0x18,0x0C,0x46,0x7F,0x00,0x00,//z
0x00,0x70,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x70,0x00,0x00,//{
0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,//|
0x00,0x0E,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x0E,0x00,0x00,//}
0x00,0x6E,0x3B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~
0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x1E,0x33,0x03,0x33,0x1E,0x18,0x30,0x1E,0x00,0x00,//€
0x00,0x00,0x00,0x33,0x00,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,//<2F>
0x00,0x00,0x38,0x00,0x1E,0x33,0x3F,0x03,0x1E,0x00,0x00,0x00,//
0x00,0x00,0x7E,0xC3,0x3C,0x60,0x7C,0x66,0xFC,0x00,0x00,0x00,//ƒ
0x00,0x00,0x33,0x00,0x1E,0x30,0x3E,0x33,0x7E,0x00,0x00,0x00,//„
0x00,0x00,0x07,0x00,0x1E,0x30,0x3E,0x33,0x7E,0x00,0x00,0x00,//…
0x00,0x00,0x0C,0x0C,0x1E,0x30,0x3E,0x33,0x7E,0x00,0x00,0x00,//†
0x00,0x00,0x00,0x00,0x3E,0x03,0x03,0x3E,0x60,0x3C,0x00,0x00,//‡
0x00,0x00,0x7E,0xC3,0x3C,0x66,0x7E,0x06,0x3C,0x00,0x00,0x00,//ˆ
0x00,0x00,0x33,0x00,0x1E,0x33,0x3F,0x03,0x1E,0x00,0x00,0x00,//‰
0x00,0x00,0x07,0x00,0x1E,0x33,0x3F,0x03,0x1E,0x00,0x00,0x00,//Š
0x00,0x00,0x33,0x00,0x0E,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,//
0x00,0x00,0x3E,0x63,0x1C,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,//Œ
0x00,0x00,0x07,0x00,0x0E,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,//<2F>
0x00,0x00,0x33,0x0C,0x1E,0x33,0x33,0x3F,0x33,0x00,0x00,0x00,//Ž
0x00,0x00,0x0C,0x0C,0x00,0x1E,0x33,0x3F,0x33,0x00,0x00,0x00,//<2F>
0x00,0x00,0x38,0x00,0x3F,0x06,0x1E,0x06,0x3F,0x00,0x00,0x00,//<2F>
0x00,0x00,0x00,0x00,0xFE,0x30,0xFE,0x33,0xFE,0x00,0x00,0x00,//
0x00,0x00,0x7C,0x36,0x33,0x7F,0x33,0x33,0x73,0x00,0x00,0x00,//
0x00,0x00,0x1E,0x33,0x00,0x1E,0x33,0x33,0x1E,0x00,0x00,0x00,//“
0x00,0x00,0x00,0x33,0x00,0x1E,0x33,0x33,0x1E,0x00,0x00,0x00,//”
0x00,0x00,0x00,0x07,0x00,0x1E,0x33,0x33,0x1E,0x00,0x00,0x00,//•
0x00,0x00,0x1E,0x33,0x00,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,//
0x00,0x00,0x00,0x07,0x00,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,//—
0x00,0x00,0x00,0x33,0x00,0x33,0x33,0x3F,0x30,0x1F,0x00,0x00,//˜
0x00,0x00,0x63,0x1C,0x3E,0x63,0x63,0x3E,0x1C,0x00,0x00,0x00,//™
0x00,0x00,0x33,0x00,0x33,0x33,0x33,0x33,0x1E,0x00,0x00,0x00,//š
0x00,0x00,0x18,0x18,0x7E,0x03,0x03,0x7E,0x18,0x18,0x00,0x00,//
0x00,0x00,0x1C,0x36,0x26,0x0F,0x06,0x67,0x3F,0x00,0x00,0x00,//œ
0x00,0x00,0x33,0x33,0x1E,0x3F,0x0C,0x3F,0x0C,0x00,0x00,0x00,//<2F>
0x00,0x00,0x0F,0x1B,0x1B,0x2F,0x33,0x7B,0x33,0x70,0x00,0x00,//ž
0x00,0x00,0x70,0xD8,0x18,0x7E,0x18,0x18,0x1B,0x0E,0x00,0x00,//Ÿ
0x00,0x00,0x38,0x00,0x1E,0x30,0x3E,0x33,0x7E,0x00,0x00,0x00,// 
0x00,0x00,0x1C,0x00,0x0E,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,//¡
0x00,0x00,0x00,0x38,0x00,0x1E,0x33,0x33,0x1E,0x00,0x00,0x00,//¢
0x00,0x00,0x00,0x38,0x00,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,//£
0x00,0x00,0x00,0x1F,0x00,0x1F,0x33,0x33,0x33,0x00,0x00,0x00,//¤
0x00,0x00,0x3F,0x00,0x33,0x37,0x3F,0x3B,0x33,0x00,0x00,0x00,//¥
0x00,0x00,0x3C,0x36,0x36,0x7C,0x00,0x7E,0x00,0x00,0x00,0x00,//¦
0x00,0x00,0x3C,0x66,0x66,0x3C,0x00,0x7E,0x00,0x00,0x00,0x00,//§
0x00,0x00,0x0C,0x00,0x0C,0x06,0x03,0x33,0x1E,0x00,0x00,0x00,//¨
0x00,0x00,0x00,0x00,0x00,0x3F,0x03,0x03,0x00,0x00,0x00,0x00,//©
0x00,0x00,0x00,0x00,0x00,0x3F,0x30,0x30,0x00,0x00,0x00,0x00,//ª
0x00,0x00,0x63,0x33,0x1B,0x7C,0xC6,0x73,0x19,0xF8,0x00,0x00,//«
0x00,0x00,0x63,0x33,0x1B,0xCF,0xE6,0xF3,0xF9,0xC0,0x00,0x00,//¬
0x00,0x00,0x00,0x18,0x00,0x18,0x18,0x3C,0x3C,0x18,0x00,0x00,//­
0x00,0x00,0x00,0xCC,0x66,0x33,0x66,0xCC,0x00,0x00,0x00,0x00,//®
0x00,0x00,0x00,0x33,0x66,0xCC,0x66,0x33,0x00,0x00,0x00,0x00,//¯
0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,//°
0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,//±
0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,//²
0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,//³
0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,//´
0x18,0x18,0x18,0x18,0x1F,0x18,0x1F,0x18,0x18,0x18,0x18,0x18,//µ
0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6F,0x6C,0x6C,0x6C,0x6C,0x6C,//¶
0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x7C,0x6C,0x6C,0x6C,0x6C,//·
0x00,0x00,0x00,0x00,0x0F,0x1C,0x1F,0x18,0x18,0x18,0x18,0x18,//¸
0x6C,0x6C,0x6C,0x6C,0x67,0x60,0x67,0x6C,0x6C,0x6C,0x6C,0x6C,//¹
0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,0x3C,//º
0x00,0x00,0x00,0x00,0x1F,0x3F,0x3F,0x3F,0x3E,0x3C,0x3C,0x3C,//»
0x3C,0x3C,0x3C,0x3E,0x3F,0x3F,0x3F,0x1F,0x00,0x00,0x00,0x00,//¼
0x6C,0x6C,0x6C,0x6C,0x6C,0x7C,0x3F,0x00,0x00,0x00,0x00,0x00,//½
0x18,0x18,0x18,0x18,0x1F,0x1C,0x0F,0x00,0x00,0x00,0x00,0x00,//¾
0x00,0x00,0x00,0x00,0x00,0x0F,0x1F,0x1C,0x18,0x18,0x18,0x18,//¿
0x18,0x18,0x18,0x18,0x38,0xF8,0xF0,0x00,0x00,0x00,0x00,0x00,//À
0x00,0x00,0x18,0x18,0x18,0x18,0xFF,0x00,0x00,0x00,0x00,0x00,//Á
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,//Â
0x18,0x18,0x18,0x18,0x18,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,//Ã
0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,//Ä
0x18,0x18,0x18,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x18,0x18,//Å
0x18,0x18,0x18,0x38,0xD8,0x18,0xD8,0x38,0x18,0x18,0x18,0x18,//Æ
0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0xEC,0x6C,0x6C,0x6C,0x6C,0x6C,//Ç
0x3C,0x3C,0x3C,0x7C,0xFC,0xFC,0xFC,0xF8,0x00,0x00,0x00,0x00,//È
0x00,0x00,0x00,0x00,0xF8,0xFC,0xFC,0xFC,0x7C,0x3C,0x3C,0x3C,//É
0x00,0x00,0x6C,0x6C,0xEF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,//Ê
0x00,0x00,0x00,0x00,0xFF,0x00,0xEF,0x6C,0x6C,0x6C,0x00,0x00,//Ë
0x00,0x00,0x6C,0x6C,0xEC,0x0C,0xEC,0x6C,0x6C,0x6C,0x00,0x00,//Ì
0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,//Í
0x6C,0x6C,0x6C,0x6C,0xEF,0x00,0xEF,0x6C,0x6C,0x6C,0x6C,0x6C,//Î
0x18,0x18,0x18,0x18,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,//Ï
0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0xFF,0x00,0x00,0x00,0x00,0x00,//Ð
0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,//Ñ
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x6C,0x6C,0x6C,0x6C,0x6C,//Ò
0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0xFC,0x00,0x00,0x00,0x00,0x00,//Ó
0x18,0x18,0x18,0x18,0xF8,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,//Ô
0x00,0x00,0x00,0x00,0xF8,0x18,0xF8,0x18,0x18,0x18,0x18,0x18,//Õ
0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x6C,0x6C,0x6C,0x6C,0x6C,//Ö
0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0xEF,0x6C,0x6C,0x6C,0x6C,0x6C,//×
0x18,0x18,0x18,0x18,0xFF,0x00,0xFF,0x18,0x18,0x18,0x18,0x18,//Ø
0x18,0x18,0x18,0x18,0x1C,0x1F,0x0F,0x00,0x00,0x00,0x00,0x00,//Ù
0x00,0x00,0x00,0x00,0x00,0xF0,0xF8,0x38,0x18,0x18,0x18,0x18,//Ú
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//Û
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,//Ü
0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,//Ý
0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,//Þ
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,//ß
0x00,0x00,0x00,0x00,0x6E,0x3B,0x13,0x3B,0x6E,0x00,0x00,0x00,//à
0x00,0x00,0x00,0x1E,0x33,0x1F,0x33,0x1F,0x03,0x03,0x00,0x00,//á
0x00,0x00,0x00,0x7F,0x63,0x03,0x03,0x03,0x03,0x00,0x00,0x00,//â
0x00,0x00,0x00,0x7F,0x36,0x36,0x36,0x36,0x36,0x00,0x00,0x00,//ã
0x00,0x00,0x7F,0x66,0x0C,0x18,0x0C,0x66,0x7F,0x00,0x00,0x00,//ä
0x00,0x00,0x00,0x00,0x7E,0x33,0x33,0x33,0x1E,0x00,0x00,0x00,//å
0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3E,0x06,0x03,0x00,0x00,//æ
0x00,0x00,0x00,0x6E,0x3B,0x18,0x18,0x18,0x18,0x00,0x00,0x00,//ç
0x00,0x00,0x3F,0x0C,0x1E,0x33,0x33,0x1E,0x0C,0x3F,0x00,0x00,//è
0x00,0x00,0x1C,0x36,0x63,0x7F,0x63,0x36,0x1C,0x00,0x00,0x00,//é
0x00,0x00,0x1C,0x36,0x63,0x63,0x36,0x36,0x77,0x00,0x00,0x00,//ê
0x00,0x00,0x38,0x0C,0x18,0x3E,0x33,0x33,0x1E,0x00,0x00,0x00,//ë
0x00,0x00,0x00,0x00,0x7E,0xDB,0xDB,0x7E,0x00,0x00,0x00,0x00,//ì
0x00,0x00,0x60,0x30,0x7E,0xDB,0xDB,0x7E,0x06,0x03,0x00,0x00,//í
0x00,0x00,0x3C,0x06,0x03,0x3F,0x03,0x06,0x3C,0x00,0x00,0x00,//î
0x00,0x00,0x1E,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00,//ï
0x00,0x00,0x00,0x3F,0x00,0x3F,0x00,0x3F,0x00,0x00,0x00,0x00,//ð
0x00,0x00,0x0C,0x0C,0x3F,0x0C,0x0C,0x00,0x3F,0x00,0x00,0x00,//ñ
0x00,0x00,0x06,0x0C,0x18,0x0C,0x06,0x00,0x3F,0x00,0x00,0x00,//ò
0x00,0x00,0x18,0x0C,0x06,0x0C,0x18,0x00,0x3F,0x00,0x00,0x00,//ó
0x00,0x00,0x70,0xD8,0xD8,0x18,0x18,0x18,0x18,0x18,0x00,0x00,//ô
0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x1B,0x1B,0x1E,0x0C,0x00,//õ
0x00,0x00,0x0C,0x0C,0x00,0x3F,0x00,0x0C,0x0C,0x00,0x00,0x00,//ö
0x00,0x00,0x00,0x4E,0x39,0x00,0x4E,0x39,0x00,0x00,0x00,0x00,//÷
0x00,0x00,0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,//ø
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,//ù
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,//ú
0x00,0x00,0xF0,0x30,0x30,0x30,0x37,0x36,0x3C,0x38,0x30,0x00,//û
0x00,0x00,0x1E,0x36,0x36,0x36,0x36,0x00,0x00,0x00,0x00,0x00,//ü
0x00,0x00,0x1E,0x30,0x1C,0x06,0x3E,0x00,0x00,0x00,0x00,0x00,//ý
0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,//þ
0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,//ÿ
};
U8 sys_font_block_8x12[256*12]= {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x0C,0xEC,0x6C,0x6C,0x6C,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x60,0x6F,0x6C,0x6C,0x6C,0x00,0x00,//��
0x00,0x00,0x18,0x18,0x18,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0xEC,0x0C,0xFC,0x00,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x18,0x18,0x18,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0x6F,0x60,0x7F,0x00,0x00,0x00,0x00,0x00,//Ù¼
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,//
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x18,0x18,0x00,0x18,0x00,0x00,0x00,// !
0x00,0x00,0x36,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00,0x00,0x00,//"#
0x00,0x00,0x30,0xFC,0x16,0x7C,0xD0,0x7E,0x18,0x00,0x00,0x00,0x00,0x00,0x06,0x66,0x30,0x18,0x0C,0x66,0x60,0x00,0x00,0x00,//$$%
0x00,0x00,0x1C,0x36,0x36,0x1C,0xB6,0x66,0xDC,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//&'
0x00,0x00,0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00,0x00,0x00,//()
0x00,0x00,0x00,0x18,0x7E,0x3C,0x7E,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00,0x00,0x00,//*+
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,//,-
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00,//./
0x00,0x00,0x3C,0x66,0x76,0x7E,0x6E,0x66,0x3C,0x00,0x00,0x00,0x00,0x00,0x18,0x1C,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,//01
0x00,0x00,0x3C,0x66,0x60,0x30,0x18,0x0C,0x7E,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x60,0x38,0x60,0x66,0x3C,0x00,0x00,0x00,//23
0x00,0x00,0x30,0x38,0x3C,0x36,0x7E,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x7E,0x06,0x3E,0x60,0x60,0x66,0x3C,0x00,0x00,0x00,//45
0x00,0x00,0x38,0x0C,0x06,0x3E,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00,0x7E,0x60,0x30,0x18,0x0C,0x0C,0x0C,0x00,0x00,0x00,//67
0x00,0x00,0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x7C,0x60,0x30,0x1C,0x00,0x00,0x00,//89
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x0C,0x00,0x00,//:;
0x00,0x00,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,//<=
0x00,0x00,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x30,0x18,0x18,0x00,0x18,0x00,0x00,0x00,//>?
0x00,0x00,0x3C,0x66,0x76,0x56,0x76,0x06,0x3C,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x00,//@A
0x00,0x00,0x3E,0x66,0x66,0x3E,0x66,0x66,0x3E,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x06,0x06,0x06,0x66,0x3C,0x00,0x00,0x00,//BC
0x00,0x00,0x1E,0x36,0x66,0x66,0x66,0x36,0x1E,0x00,0x00,0x00,0x00,0x00,0x7E,0x06,0x06,0x3E,0x06,0x06,0x7E,0x00,0x00,0x00,//DE
0x00,0x00,0x7E,0x06,0x06,0x3E,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x06,0x76,0x66,0x66,0x3C,0x00,0x00,0x00,//FG
0x00,0x00,0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,//HI
0x00,0x00,0x7C,0x30,0x30,0x30,0x30,0x36,0x1C,0x00,0x00,0x00,0x00,0x00,0x66,0x36,0x1E,0x0E,0x1E,0x36,0x66,0x00,0x00,0x00,//JK
0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x7E,0x00,0x00,0x00,0x00,0x00,0xC6,0xEE,0xFE,0xD6,0xD6,0xC6,0xC6,0x00,0x00,0x00,//LM
0x00,0x00,0x66,0x66,0x6E,0x7E,0x76,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,//NO
0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x56,0x36,0x6C,0x00,0x00,0x00,//PQ
0x00,0x00,0x3E,0x66,0x66,0x3E,0x36,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x06,0x3C,0x60,0x66,0x3C,0x00,0x00,0x00,//RS
0x00,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,//TU
0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,0x00,0xC6,0xC6,0xD6,0xD6,0xFE,0xEE,0xC6,0x00,0x00,0x00,//VW
0x00,0x00,0x66,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x00,0x00,0x00,//XY
0x00,0x00,0x7E,0x60,0x30,0x18,0x0C,0x06,0x7E,0x00,0x00,0x00,0x00,0x00,0x3E,0x06,0x06,0x06,0x06,0x06,0x3E,0x00,0x00,0x00,//Z[
0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x60,0x60,0x60,0x60,0x60,0x7C,0x00,0x00,0x00,//\]
0x00,0x00,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,//^_
0x00,0x00,0x0C,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x60,0x7C,0x66,0x7C,0x00,0x00,0x00,//`a
0x00,0x00,0x06,0x06,0x3E,0x66,0x66,0x66,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x06,0x66,0x3C,0x00,0x00,0x00,//bc
0x00,0x00,0x60,0x60,0x7C,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x7E,0x06,0x3C,0x00,0x00,0x00,//de
0x00,0x00,0x38,0x0C,0x0C,0x3E,0x0C,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x7C,0x60,0x3C,0x00,0x00,//fg
0x00,0x00,0x06,0x06,0x3E,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x1C,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,//hi
0x00,0x00,0x18,0x00,0x1C,0x18,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x00,0x06,0x06,0x66,0x36,0x1E,0x36,0x66,0x00,0x00,0x00,//jk
0x00,0x00,0x1C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0xFE,0xD6,0xD6,0xC6,0x00,0x00,0x00,//lm
0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00,0x00,0x00,//no
0x00,0x00,0x00,0x00,0x3E,0x66,0x66,0x3E,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x66,0x66,0x7C,0x60,0xE0,0x00,0x00,//pq
0x00,0x00,0x00,0x00,0x36,0x6E,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x06,0x3C,0x60,0x3E,0x00,0x00,0x00,//rs
0x00,0x00,0x0C,0x0C,0x3E,0x0C,0x0C,0x0C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x00,//tu
0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0xD6,0xD6,0xFE,0x6C,0x00,0x00,0x00,//vw
0x00,0x00,0x00,0x00,0x66,0x3C,0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x7C,0x60,0x3C,0x00,0x00,//xy
0x00,0x00,0x00,0x00,0x7E,0x30,0x18,0x0C,0x7E,0x00,0x00,0x00,0x00,0x00,0x30,0x18,0x18,0x0E,0x18,0x18,0x30,0x00,0x00,0x00,//z{
0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x18,0x70,0x18,0x18,0x0C,0x00,0x00,0x00,//|}
0x00,0x00,0x8C,0xD6,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,//~
0x00,0x00,0x1E,0x33,0x03,0x33,0x1E,0x18,0x30,0x1E,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,//��
0x00,0x00,0x38,0x00,0x1E,0x33,0x3F,0x03,0x1E,0x00,0x00,0x00,0x00,0x00,0x7E,0xC3,0x3C,0x60,0x7C,0x66,0xFC,0x00,0x00,0x00,//��
0x00,0x00,0x33,0x00,0x1E,0x30,0x3E,0x33,0x7E,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x1E,0x30,0x3E,0x33,0x7E,0x00,0x00,0x00,//��
0x00,0x00,0x0C,0x0C,0x1E,0x30,0x3E,0x33,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x03,0x03,0x3E,0x60,0x3C,0x00,0x00,//��
0x00,0x00,0x7E,0xC3,0x3C,0x66,0x7E,0x06,0x3C,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x1E,0x33,0x3F,0x03,0x1E,0x00,0x00,0x00,//��
0x00,0x00,0x07,0x00,0x1E,0x33,0x3F,0x03,0x1E,0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x0E,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,//��
0x00,0x00,0x3E,0x63,0x1C,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x0E,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,//��
0x00,0x00,0x33,0x0C,0x1E,0x33,0x33,0x3F,0x33,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x1E,0x33,0x3F,0x33,0x00,0x00,0x00,//��
0x00,0x00,0x38,0x00,0x3F,0x06,0x1E,0x06,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x30,0xFE,0x33,0xFE,0x00,0x00,0x00,//��
0x00,0x00,0x7C,0x36,0x33,0x7F,0x33,0x33,0x73,0x00,0x00,0x00,0x00,0x00,0x1E,0x33,0x00,0x1E,0x33,0x33,0x1E,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x33,0x00,0x1E,0x33,0x33,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x1E,0x33,0x33,0x1E,0x00,0x00,0x00,//��
0x00,0x00,0x1E,0x33,0x00,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x33,0x00,0x33,0x33,0x3F,0x30,0x1F,0x00,0x00,0x00,0x00,0x63,0x1C,0x3E,0x63,0x63,0x3E,0x1C,0x00,0x00,0x00,//��
0x00,0x00,0x33,0x00,0x33,0x33,0x33,0x33,0x1E,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7E,0x03,0x03,0x7E,0x18,0x18,0x00,0x00,//��
0x00,0x00,0x1C,0x36,0x26,0x0F,0x06,0x67,0x3F,0x00,0x00,0x00,0x00,0x00,0x33,0x33,0x1E,0x3F,0x0C,0x3F,0x0C,0x00,0x00,0x00,//��
0x00,0x00,0x0F,0x1B,0x1B,0x2F,0x33,0x7B,0x33,0x70,0x00,0x00,0x00,0x00,0x70,0xD8,0x18,0x7E,0x18,0x18,0x1B,0x0E,0x00,0x00,//��
0x00,0x00,0x38,0x00,0x1E,0x30,0x3E,0x33,0x7E,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x0E,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x38,0x00,0x1E,0x33,0x33,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x1F,0x00,0x1F,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x33,0x37,0x3F,0x3B,0x33,0x00,0x00,0x00,//��
0x00,0x00,0x3C,0x36,0x36,0x7C,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x66,0x66,0x3C,0x00,0x7E,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x0C,0x00,0x0C,0x06,0x03,0x33,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x03,0x03,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x00,0x3F,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x63,0x33,0x1B,0x7C,0xC6,0x73,0x19,0xF8,0x00,0x00,//��
0x00,0x00,0x63,0x33,0x1B,0xCF,0xE6,0xF3,0xF9,0xC0,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x18,0x18,0x3C,0x3C,0x18,0x00,0x00,//��
0x00,0x00,0x00,0xCC,0x66,0x33,0x66,0xCC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x66,0xCC,0x66,0x33,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x00,0x00,0x00,0x00,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0x00,0x00,//��
0x00,0x00,0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,0xBB,0xEE,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,//��
0x00,0x00,0x18,0x18,0x18,0x18,0x1F,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x1F,0x18,0x1F,0x18,0x18,0x18,0x00,0x00,//��
0x00,0x00,0x6C,0x6C,0x6C,0x6C,0x6F,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x6C,0x6C,0x6C,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x1F,0x18,0x1F,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x6C,0x6C,0x6F,0x60,0x6F,0x6C,0x6C,0x6C,0x00,0x00,//��
0x00,0x00,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x60,0x6F,0x6C,0x6C,0x6C,0x00,0x00,//��
0x00,0x00,0x6C,0x6C,0x6F,0x60,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0x6C,0x6C,0x7F,0x00,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x18,0x18,0x1F,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x18,0x18,0x18,0x00,0x00,//��
0x00,0x00,0x18,0x18,0x18,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0xFF,0x00,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0xF8,0x18,0x18,0x18,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x00,0x00,//��
0x00,0x00,0x18,0x18,0xF8,0x18,0xF8,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x6C,0x6C,0x6C,0x6C,0xEC,0x6C,0x6C,0x6C,0x00,0x00,//��
0x00,0x00,0x6C,0x6C,0xEC,0x0C,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x0C,0xEC,0x6C,0x6C,0x6C,0x00,0x00,//��
0x00,0x00,0x6C,0x6C,0xEF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xEF,0x6C,0x6C,0x6C,0x00,0x00,//��
0x00,0x00,0x6C,0x6C,0xEC,0x0C,0xEC,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x6C,0x6C,0xEF,0x00,0xEF,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x18,0x18,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x6C,0x6C,0x6C,0x6C,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0xFF,0x18,0x18,0x18,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x6C,0x6C,0x6C,0x6C,0xFC,0x00,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x18,0x18,0xF8,0x18,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x18,0xF8,0x18,0x18,0x18,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x6C,0x6C,0x6C,0x6C,0xEF,0x6C,0x6C,0x6C,0x00,0x00,//��
0x00,0x00,0x18,0x18,0xFF,0x00,0xFF,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x1F,0x00,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x00,0x00,//��
0x00,0x00,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x6E,0x3B,0x13,0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x33,0x1F,0x33,0x1F,0x03,0x03,0x00,0x00,//��
0x00,0x00,0x00,0x7F,0x63,0x03,0x03,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x36,0x36,0x36,0x36,0x36,0x00,0x00,0x00,//��
0x00,0x00,0x7F,0x66,0x0C,0x18,0x0C,0x66,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x33,0x33,0x33,0x1E,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x3E,0x06,0x03,0x00,0x00,0x00,0x00,0x00,0x6E,0x3B,0x18,0x18,0x18,0x18,0x00,0x00,0x00,//��
0x00,0x00,0x3F,0x0C,0x1E,0x33,0x33,0x1E,0x0C,0x3F,0x00,0x00,0x00,0x00,0x1C,0x36,0x63,0x7F,0x63,0x36,0x1C,0x00,0x00,0x00,//��
0x00,0x00,0x1C,0x36,0x63,0x63,0x36,0x36,0x77,0x00,0x00,0x00,0x00,0x00,0x38,0x0C,0x18,0x3E,0x33,0x33,0x1E,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x7E,0xDB,0xDB,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x7E,0xDB,0xDB,0x7E,0x06,0x03,0x00,0x00,//��
0x00,0x00,0x3C,0x06,0x03,0x3F,0x03,0x06,0x3C,0x00,0x00,0x00,0x00,0x00,0x1E,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x3F,0x00,0x3F,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x3F,0x0C,0x0C,0x00,0x3F,0x00,0x00,0x00,//��
0x00,0x00,0x06,0x0C,0x18,0x0C,0x06,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x18,0x0C,0x06,0x0C,0x18,0x00,0x3F,0x00,0x00,0x00,//��
0x00,0x00,0x70,0xD8,0xD8,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x1B,0x1B,0x0E,0x00,0x00,//��
0x00,0x00,0x0C,0x0C,0x00,0x3F,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x4E,0x39,0x00,0x4E,0x39,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x30,0x30,0x30,0x37,0x36,0x3C,0x38,0x00,0x00,//��
0x00,0x00,0x1E,0x36,0x36,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x30,0x1C,0x06,0x3E,0x00,0x00,0x00,0x00,0x00,//��
0x00,0x00,0x00,0x00,0x3C,0x3C,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,//��
};

View file

@ -72,9 +72,8 @@ U0 SysGrInit()
{ {
I64 i; I64 i;
text.font = sys_font_std; text.font = SYS_FONT_STD;
text.aux_font = SYS_FONT_AUX;
text.aux_font = sys_font_aux;
//patch some chars //patch some chars
text.aux_font[10] = text.font[10]; //"Return" symbol text.aux_font[10] = text.font[10]; //"Return" symbol

View file

@ -31,6 +31,7 @@
#include "Memory/MakeMemory" #include "Memory/MakeMemory"
#include "FontStd" #include "FontStd"
#include "FontAux" #include "FontAux"
#include "FontStd8x12"
#include "StrB" #include "StrB"
#include "KHashA" #include "KHashA"
#include "KInterrupts" #include "KInterrupts"

View file

@ -4303,6 +4303,16 @@ public class CTextGlobals
#define FONT_WIDTH 8 #define FONT_WIDTH 8
#define FONT_HEIGHT 8 #define FONT_HEIGHT 8
#define SYS_FONT_STD sys_font_std
#define SYS_FONT_AUX sys_font_aux
/** Uncomment below to switch to an 8x12 font
The Kernel will need to be rebuilt after the change with BootHDIns
*/
//#define FONT_WIDTH 8
//#define FONT_HEIGHT 12
//#define SYS_FONT_STD sys_font_lat0_8x12
//#define SYS_FONT_AUX sys_font_block_8x12
#help_index "Graphics" #help_index "Graphics"
//z-values less than zero are in front of screen and not drawn. //z-values less than zero are in front of screen and not drawn.

View file

@ -145,155 +145,40 @@ _DC_BLOT_COLOR4::
POP RSI POP RSI
POP RBP POP RBP
RET1 32 RET1 32
//************************************ }
_IS_PIX_COVERED0::
PUSH RBP
MOV RBP, RSP
#assert FONT_WIDTH == FONT_HEIGHT == 8
MOV RCX, U64 SF_ARG3[RBP]
SAR RCX, 3
MOV RAX, U64 SF_ARG2[RBP]
SAR RAX, 3
MOV RDX, U64 SF_ARG1[RBP]
IMUL2 RCX, TEXT_COLS
MOV RBX, U64 [&gr.win_z_buf]
MOV DX, U16 CTask.win_z_num[RDX]
ADD RCX, RAX
XOR RAX, RAX
CMP DX, U16 [RBX + RCX * 2]
JAE @@05 //Jump not covered
INC RAX
@@05: POP RBP
RET1 24
//************************************
_GR_ROP_EQU_U8_NO_CLIPPING::
//Puts foreground char shape onto gr.dc2.
//ch.u8[1] is color as a whole byte
//ch ATTRf_UNDERLINE attr flag is used.
PUSH RBP
MOV RBP, RSP
MOVZX RAX, U8 SF_ARG1[RBP]
MOV RDX, U64 [&text.font]
MOV RAX, U64 [RDX + RAX * 8] //RAX is 8x8 char font data, 64-bits
BT U64 SF_ARG1[RBP], ATTRf_UNDERLINE
JNC @@05
MOV RBX, 0xFF00000000000000
OR RAX, RBX
@@05: TEST RAX, RAX
JZ I32 @@10
PUSH RSI U0 GrRopEquU8NoClipping(I64 ch, U8 reg *dst, I64 width_internal)
PUSH RDI { // render the Font to the Display contexts frame buffer
MOVZX RBX, U8 SF_ARG1 + 1[RBP] //Warning color is 8-bit U8 *fontPointer = text.font(U8*) + ((ch & &0xFF) * FONT_HEIGHT),
MOV RDX, U64 [&gr.to_8_colors] reg fgColor = ch.u8[1];
MOV R8, U64 [RDX + RBX * 8] //R8 is color repeated 8 times. U64 ix = FONT_WIDTH -1, i = 0, colInc = width_internal - FONT_WIDTH;
MOV R9, U64 SF_ARG3[RBP] //R9 is width_internal
MOV RDI, U64 SF_ARG2[RBP]
MOV RSI, U64 [&gr.to_8_bits] //RSI is gr.to_8_bits
// m=my_1_to_8_bits[ch&255];ch>>=8; for (; i < FONT_WIDTH * FONT_HEIGHT; i++) {
// *dst=*dst&~m|c&m; if (Bt(fontPointer, i)) {
// dst(U8 *)+=w1; *dst = fgColor;
}
dst++;
MOVZX RBX, AL if (i & ix == ix) {
MOV RDX, U64 [RSI + RBX * 8] dst += colInc;
SHR RAX, 8 }
MOV RBX, U64 [RDI] }
MOV RCX, RDX
NOT RCX
AND RDX, R8
AND RCX, RBX
OR RCX, RDX
MOV U64 [RDI], RCX
ADD RDI, R9
MOVZX RBX, AL if (ch & ATTRF_UNDERLINE && DISPLAY_UNDERLINE) {
MOV RDX, U64 [RSI + RBX * 8] dst -= width_internal;
SHR RAX, 8 for (i = 0; i < FONT_WIDTH; i++, dst++) {
MOV RBX, U64 [RDI] *dst = fgColor;
MOV RCX, RDX }
NOT RCX }
AND RDX, R8
AND RCX, RBX
OR RCX, RDX
MOV U64 [RDI], RCX
ADD RDI, R9
MOVZX RBX, AL }
MOV RDX, U64 [RSI + RBX * 8]
SHR RAX, 8
MOV RBX, U64 [RDI]
MOV RCX, RDX
NOT RCX
AND RDX, R8
AND RCX, RBX
OR RCX, RDX
MOV U64 [RDI], RCX
ADD RDI, R9
MOVZX RBX, AL Bool IsPixCovered0(CTask *task, I64 x, I64 y)//No clipping
MOV RDX, U64 [RSI + RBX * 8] {// No Clipping
SHR RAX, 8 U64 offset = (y / FONT_HEIGHT) * TEXT_COLS + (x / FONT_WIDTH);
MOV RBX, U64 [RDI]
MOV RCX, RDX
NOT RCX
AND RDX, R8
AND RCX, RBX
OR RCX, RDX
MOV U64 [RDI], RCX
ADD RDI, R9
MOVZX RBX, AL // is this the task drawing this char
MOV RDX, U64 [RSI + RBX * 8] return gr.win_z_buf[offset] == (task->win_z_num -1);
SHR RAX, 8 }
MOV RBX, U64 [RDI]
MOV RCX, RDX
NOT RCX
AND RDX, R8
AND RCX, RBX
OR RCX, RDX
MOV U64 [RDI], RCX
ADD RDI, R9
MOVZX RBX, AL
MOV RDX, U64 [RSI + RBX * 8]
SHR RAX, 8
MOV RBX, U64 [RDI]
MOV RCX, RDX
NOT RCX
AND RDX, R8
AND RCX, RBX
OR RCX, RDX
MOV U64 [RDI], RCX
ADD RDI, R9
MOVZX RBX, AL
MOV RDX, U64 [RSI + RBX * 8]
SHR RAX, 8
MOV RBX, U64 [RDI]
MOV RCX, RDX
NOT RCX
AND RDX, R8
AND RCX, RBX
OR RCX, RDX
MOV U64 [RDI], RCX
ADD RDI, R9
MOV RDX, U64 [RSI + RAX * 8]
MOV RBX, U64 [RDI]
MOV RCX, RDX
NOT RCX
AND RDX, R8
AND RCX, RBX
OR RCX, RDX
MOV U64 [RDI], RCX
POP RDI
POP RSI
@@10: POP RBP
RET1 24
};
_extern _GR_ROP_EQU_U8_NO_CLIPPING U0 GrRopEquU8NoClipping(I64 ch, U8 *dst, I64 width_internal);
public _extern _IS_PIX_COVERED0 Bool IsPixCovered0(CTask *task, I64 x, I64 y);//No clipping
_extern _DC_BLOT_COLOR4 U0 DCBlotColor4(U8 *dst, I64 *img, I64 *img_cache, I64 count); _extern _DC_BLOT_COLOR4 U0 DCBlotColor4(U8 *dst, I64 *img, I64 *img_cache, I64 count);

View file

@ -56,3 +56,7 @@ DefinePrint("TEXT_ROWS", "%d", text.rows);;
HashPublic("TEXT_ROWS", HTT_DEFINE_STR);; HashPublic("TEXT_ROWS", HTT_DEFINE_STR);;
DefinePrint("TEXT_COLS", "%d", text.cols);; DefinePrint("TEXT_COLS", "%d", text.cols);;
HashPublic("TEXT_COLS", HTT_DEFINE_STR);; HashPublic("TEXT_COLS", HTT_DEFINE_STR);;
DefinePrint("DISPLAY_UNDERLINE", "%d", 1);;
HashPublic("DISPLAY_UNDERLINE", HTT_DEFINE_STR);;

View file

@ -177,16 +177,17 @@ U0 GrZoomInScreen()
U0 GrUpdateTextBG() U0 GrUpdateTextBG()
{ {
I64 reg RSI *dst = gr.dc2->body, reg R13 c, row, col, I64 reg *dst = gr.dc2->body, row, col,
num_rows = TEXT_ROWS, num_cols = TEXT_COLS, i, j, cur_ch, num_rows = TEXT_ROWS, num_cols = TEXT_COLS, i, j, cur_ch,
reg R12 w1 = gr.dc2->width_internal, w2 = -7 * w1 + 8, w3 = 7 * w1, w4 = 0; reg w1 = gr.dc2->width_internal,
U32 *src = gr.text_base; w3 = (FONT_HEIGHT - 1) * w1, w4 = 0;
U32 *src = gr.text_base, ix =0, iy =0;
Bool blink_flag = Blink; Bool blink_flag = Blink;
U8 *dst2 = dst; U8 *dst2 = dst, bgColor, reg *dstTmp;
if (gr.pan_text_x || gr.hide_col) if (gr.pan_text_x || gr.hide_col)
{ {
gr.pan_text_x = ClampI64(gr.pan_text_x, -7, 7); gr.pan_text_x = ClampI64(gr.pan_text_x, -(FONT_WIDTH - 1), (FONT_WIDTH - 1));
j = AbsI64(gr.pan_text_x) / FONT_WIDTH + 1; j = AbsI64(gr.pan_text_x) / FONT_WIDTH + 1;
num_cols -= j; num_cols -= j;
if (gr.pan_text_x < 0) if (gr.pan_text_x < 0)
@ -215,7 +216,7 @@ U0 GrUpdateTextBG()
if (gr.pan_text_y || gr.hide_row) if (gr.pan_text_y || gr.hide_row)
{ {
gr.pan_text_y = ClampI64(gr.pan_text_y, -7, 7); gr.pan_text_y = ClampI64(gr.pan_text_y, -(FONT_HEIGHT - 1), (FONT_HEIGHT - 1));
j = AbsI64(gr.pan_text_y) / FONT_HEIGHT + 1; j = AbsI64(gr.pan_text_y) / FONT_HEIGHT + 1;
num_rows -= j; num_rows -= j;
if (gr.pan_text_y < 0) if (gr.pan_text_y < 0)
@ -251,23 +252,12 @@ U0 GrUpdateTextBG()
if (cur_ch & ATTRF_BLINK && blink_flag) if (cur_ch & ATTRF_BLINK && blink_flag)
cur_ch.u8[1] = cur_ch.u8[1] << 4 + cur_ch.u8[1] >> 4; cur_ch.u8[1] = cur_ch.u8[1] << 4 + cur_ch.u8[1] >> 4;
} }
c = gr.to_8_colors[cur_ch.u8[1] >> 4]; bgColor = cur_ch.u8[1] >> 4;
MOV U64 [RSI], R13 dstTmp = dst(U8*);
ADD RSI, R12 for (iy = 0; iy < FONT_HEIGHT; iy++, dstTmp += GR_WIDTH - FONT_WIDTH) {
MOV U64 [RSI], R13 for (ix = 0; ix < FONT_WIDTH; ix++, *dstTmp++ = bgColor);
ADD RSI, R12 }
MOV U64 [RSI], R13 dst(U8*) += FONT_WIDTH;
ADD RSI, R12
MOV U64 [RSI], R13
ADD RSI, R12
MOV U64 [RSI], R13
ADD RSI, R12
MOV U64 [RSI], R13
ADD RSI, R12
MOV U64 [RSI], R13
ADD RSI, R12
MOV U64 [RSI], R13
dst(U8 *) += w2;
} }
src += w4; src += w4;
dst(U8 *) += w3; dst(U8 *) += w3;
@ -277,14 +267,14 @@ U0 GrUpdateTextBG()
U0 GrUpdateTextFG() U0 GrUpdateTextFG()
{//See $LK,"TextBase Layer",A="HI:TextBase Layer"$. {//See $LK,"TextBase Layer",A="HI:TextBase Layer"$.
U32 *src = gr.text_base; U32 *src = gr.text_base;
I64 i, j, cur_ch, *dst = gr.dc2->body, w1 = gr.dc2->width_internal, w2 = 7 * w1, w4 = 0, I64 i, j, cur_ch, *dst = gr.dc2->body, w1 = gr.dc2->width_internal, w2 = (FONT_HEIGHT - 1) * w1, w4 = 0,
num_rows = TEXT_ROWS, num_cols = TEXT_COLS, row, col; num_rows = TEXT_ROWS, num_cols = TEXT_COLS, row, col;
U8 *dst_start = gr.dc2->body, *dst_end = dst_start + w1 * gr.dc2->height - 7 * w1 - 8; U8 *dst_start = gr.dc2->body, *dst_end = dst_start + w1 * gr.dc2->height - (FONT_HEIGHT - 1) * w1 - FONT_WIDTH;
Bool blink_flag = Blink; Bool blink_flag = Blink;
if (gr.pan_text_x || gr.hide_col) if (gr.pan_text_x || gr.hide_col)
{ {
gr.pan_text_x = ClampI64(gr.pan_text_x, -7, 7); gr.pan_text_x = ClampI64(gr.pan_text_x, -(FONT_WIDTH - 1), (FONT_WIDTH - 1));
j = AbsI64(gr.pan_text_x) / FONT_WIDTH + 1; j = AbsI64(gr.pan_text_x) / FONT_WIDTH + 1;
num_cols -= j; num_cols -= j;
if (gr.pan_text_x < 0) if (gr.pan_text_x < 0)
@ -298,7 +288,7 @@ U0 GrUpdateTextFG()
if (gr.pan_text_y || gr.hide_row) if (gr.pan_text_y || gr.hide_row)
{ {
gr.pan_text_y = ClampI64(gr.pan_text_y, -7, 7); gr.pan_text_y = ClampI64(gr.pan_text_y, -(FONT_HEIGHT - 1), (FONT_HEIGHT - 1));
j = AbsI64(gr.pan_text_y) / FONT_HEIGHT + 1; j = AbsI64(gr.pan_text_y) / FONT_HEIGHT + 1;
num_rows -= j; num_rows -= j;
if (gr.pan_text_y < 0) if (gr.pan_text_y < 0)
@ -335,7 +325,7 @@ U0 GrUpdateTextFG()
} }
else else
GrRopEquU8NoClipping(cur_ch & (ATTRF_UNDERLINE + 0xFFF), dst, w1); GrRopEquU8NoClipping(cur_ch & (ATTRF_UNDERLINE + 0xFFF), dst, w1);
dst(U8 *) += 8; dst(U8 *) += FONT_WIDTH;
} }
src += w4; src += w4;
dst(U8 *) += w2; dst(U8 *) += w2;

View file

@ -1,43 +1,40 @@
# Nuke built-in rules and variables. # Nuke built-in rules and variables.
override MAKEFLAGS += -rR MAKEFLAGS += -rR
.SUFFIXES:
# This is the name that our final executable will have. # This is the name that our final executable will have.
# Change as needed. # Change as needed.
override OUTPUT := kernel override OUTPUT := kernel
# Convenience macro to reliably declare user overridable variables. # Convenience macro to reliably declare user overridable variables.
define DEFAULT_VAR = override USER_VARIABLE = $(if $(filter $(origin $(1)),default undefined),$(eval override $(1) := $(2)))
ifeq ($(origin $1),default)
override $(1) := $(2)
endif
ifeq ($(origin $1),undefined)
override $(1) := $(2)
endif
endef
# User controllable C compiler command. # User controllable C compiler command.
override DEFAULT_KCC := cc $(call USER_VARIABLE,KCC,cc)
$(eval $(call DEFAULT_VAR,KCC,$(DEFAULT_KCC)))
# User controllable linker command. # User controllable linker command.
override DEFAULT_KLD := ld $(call USER_VARIABLE,KLD,ld)
$(eval $(call DEFAULT_VAR,KLD,$(DEFAULT_KLD)))
# User controllable C flags. # User controllable C flags.
override DEFAULT_KCFLAGS := -g -O2 -pipe $(call USER_VARIABLE,KCFLAGS,-g -O2 -pipe)
$(eval $(call DEFAULT_VAR,KCFLAGS,$(DEFAULT_KCFLAGS)))
# User controllable C preprocessor flags. We set none by default. # User controllable C preprocessor flags. We set none by default.
override DEFAULT_KCPPFLAGS := $(call USER_VARIABLE,KCPPFLAGS,)
$(eval $(call DEFAULT_VAR,KCPPFLAGS,$(DEFAULT_KCPPFLAGS)))
# User controllable nasm flags. # User controllable nasm flags.
override DEFAULT_KNASMFLAGS := -F dwarf -g $(call USER_VARIABLE,KNASMFLAGS,-F dwarf -g)
$(eval $(call DEFAULT_VAR,KNASMFLAGS,$(DEFAULT_KNASMFLAGS)))
# User controllable linker flags. We set none by default. # User controllable linker flags. We set none by default.
override DEFAULT_KLDFLAGS := $(call USER_VARIABLE,KLDFLAGS,)
$(eval $(call DEFAULT_VAR,KLDFLAGS,$(DEFAULT_KLDFLAGS)))
# Check if KCC is Clang.
override KCC_IS_CLANG := $(shell ! $(KCC) --version 2>/dev/null | grep 'clang' >/dev/null 2>&1; echo $$?)
# If the C compiler is Clang, set the target as needed.
ifeq ($(KCC_IS_CLANG),1)
override KCC += \
-target x86_64-unknown-none
endif
# Internal C flags that should not be changed by the user. # Internal C flags that should not be changed by the user.
override KCFLAGS += \ override KCFLAGS += \

View file

@ -9,9 +9,10 @@ ENTRY(kmain)
/* process. */ /* process. */
PHDRS PHDRS
{ {
text PT_LOAD; requests PT_LOAD;
rodata PT_LOAD; text PT_LOAD;
data PT_LOAD; rodata PT_LOAD;
data PT_LOAD;
} }
SECTIONS SECTIONS
@ -22,6 +23,16 @@ SECTIONS
/* that is the beginning of the region. */ /* that is the beginning of the region. */
. = 0xffffffff80000000; . = 0xffffffff80000000;
/* Define a section to contain the Limine requests and assign it to its own PHDR */
.requests : {
KEEP(*(.requests_start_marker))
KEEP(*(.requests))
KEEP(*(.requests_end_marker))
} :requests
/* Move to the next memory page for .text */
. = ALIGN(CONSTANT(MAXPAGESIZE));
.text : { .text : {
*(.text .text.*) *(.text .text.*)
} :text } :text
@ -38,12 +49,6 @@ SECTIONS
.data : { .data : {
*(.data .data.*) *(.data .data.*)
/* Place the sections that contain the Limine requests as part of the .data */
/* output section. */
KEEP(*(.requests_start_marker))
KEEP(*(.requests))
KEEP(*(.requests_end_marker))
} :data } :data
/* NOTE: .bss needs to be the last thing mapped to :data, otherwise lots of */ /* NOTE: .bss needs to be the last thing mapped to :data, otherwise lots of */