#include "lcd.h" #include "fonty.h" #include "charset.info" #include "charset.bits" static unsigned char tx, ty; static unsigned short coff; unsigned char *font_bits, *font_info; void set_font(unsigned char f) { font_bits = (unsigned char*) charset_bits; font_info = (unsigned char*) charset_info; switch(f) { case 0: coff = 0; break; case 1: coff = 96; break; case 2: coff = 224; break; case 3: case 4: coff = 272; break; } } void _draw_char( unsigned int ch, // char unsigned char c, // color unsigned char m // mode ) { unsigned char p,s; unsigned int cpos, cnt; cpos = 0; for(cnt=0; cnt<ch; cnt++) { if(cnt & 0x01) { cpos += (font_info[cnt>>1] & 0x0F); } else { cpos += (font_info[cnt>>1] >> 4); } } p = font_info[ch>>1]; if(ch & 0x01) { p &= 0x0F; } else { p >>= 4; } if(ty & 0x07) { s = ty & 0x07; for(cnt=0;cnt<p;cnt++) { if(c & 0x02) drawbuf[0][p-cnt-1] = font_bits[cpos+cnt] << s; else drawbuf[0][p-cnt-1] = 0x00; if(c & 0x01) drawbuf[1][p-cnt-1] = font_bits[cpos+cnt] << s; else drawbuf[1][p-cnt-1] = 0x00; } do_rcu(tx,ty,p,m); for(cnt=0;cnt<p;cnt++) { if(c & 0x02) drawbuf[0][p-cnt-1] = font_bits[cpos+cnt] >> (8-s); else drawbuf[0][p-cnt-1] = 0x00; if(c & 0x01) drawbuf[1][p-cnt-1] = font_bits[cpos+cnt] >> (8-s); else drawbuf[1][p-cnt-1] = 0x00; } do_rcu(tx,ty+8,p,m); } else { for(cnt=0;cnt<p;cnt++) { if(c & 0x02) drawbuf[0][p-cnt-1] = font_bits[cpos+cnt]; else drawbuf[0][p-cnt-1] = 0x00; if(c & 0x01) drawbuf[1][p-cnt-1] = font_bits[cpos+cnt]; else drawbuf[1][p-cnt-1] = 0x00; } do_rcu(tx,ty,p,m); } tx += (p+1); } void draw_char(unsigned char x, unsigned char y, unsigned char ch, unsigned char c, unsigned char m) { tx = x; ty = y; _draw_char(ch+coff, c, m); } void draw_string(unsigned char x, unsigned char y, char *st, unsigned char c, unsigned char m) { unsigned char cp; tx = x; ty = y; cp = 0; while(st[cp] != 0) { _draw_char(st[cp]+coff, c, m); cp++; } } void draw_stringc(unsigned char x, unsigned char y, char *st, unsigned char cnt, unsigned char c, unsigned char m) { unsigned char cp,cx; cx = cnt; tx = x; ty = y; cp = 0; while(cx--) { _draw_char(st[cp]+coff, c, m); cp++; } } extern char hval[16]; void draw_hexC(unsigned char x, unsigned char y, const unsigned char v, unsigned char c, unsigned char m) { tx = x; ty = y; _draw_char(hval[v>>4]+coff, c, m); _draw_char(hval[v & 0x0F]+coff, c, m); } void draw_hexS(unsigned char x, unsigned char y, const unsigned short v, unsigned char c, unsigned char m) { tx = x; ty = y; draw_hexC(x, y, v >> 8, c, m); draw_hexC(tx, ty, v & 0xFF, c, m); } void draw_hexW(unsigned char x, unsigned char y, const unsigned long v, unsigned char c, unsigned char m) { draw_hexS(x, y, v >> 16, c, m); draw_hexS(tx, ty, v & 0xFFFF, c, m); }