Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static char mask[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 };
- static int addr[] = { 0x000, 0x060, 0x060*2, 0x060*3, 0x060*4, 0x060*5, 0x060*6, 0x060*7, };
- static char number_font[] = {
- 0x3e, 0x41, 0x41, 0x41, 0x3e, 0x00, /*0*/
- 0x00, 0x42, 0x7f, 0x40, 0x00, 0x00, /*1*/
- 0x42, 0x61, 0x51, 0x49, 0x46, 0x00, /*2*/
- 0x22, 0x41, 0x49, 0x49, 0x36, 0x00, /*3*/
- 0x1c, 0x13, 0x10, 0x7f, 0x10, 0x00, /*4*/
- 0x2f, 0x49, 0x49, 0x49, 0x31, 0x00, /*5*/
- 0x3e, 0x49, 0x49, 0x49, 0x32, 0x00, /*6*/
- 0x01, 0x01, 0x71, 0x09, 0x07, 0x00, /*7*/
- 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, /*8*/
- 0x26, 0x49, 0x49, 0x49, 0x3e, 0x00, /*9*/
- 0x7c, 0x12, 0x11, 0x12, 0x7c, 0x00, /*A*/
- 0x7f, 0x49, 0x49, 0x49, 0x36, 0x00, /*B*/
- 0x3e, 0x41, 0x41, 0x41, 0x22, 0x00, /*C*/
- 0x7f, 0x41, 0x41, 0x41, 0x3e, 0x00, /*D*/
- 0x7f, 0x49, 0x49, 0x49, 0x49, 0x00, /*E*/
- 0x7f, 0x09, 0x09, 0x09, 0x09, 0x00, /*F*/
- 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, /*-*/
- };
- static int font_offset[] = { 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96 };
- void print_digit(int x, int y, int digit)
- {
- char *ad = (char *)0x1000 + addr[y] + x;
- char *font_pos = number_font + font_offset[digit];
- char i;
- for(i=0; i<6; i++)
- ad[i] = font_pos[i];
- }
- int digits[] = { 0, 1, 10, 100, 1000, 10000 };
- void print_dec(char x, char y, int num)
- {
- if(num < 0)
- {
- print_digit(x, y, 16); /* - */
- print_dec(x + 6, y, -num);
- return;
- }
- else
- {
- char i, j;
- for(i=5; i>1; i--)
- if(digits[i] <= num)
- break;
- for(; i>0; i--)
- {
- for(j=0; j<10; j++)
- {
- if(num < digits[i])
- break;
- num -= digits[i];
- }
- print_digit(x, y, j);
- x += 6;
- }
- }
- }
- void print_hex(char x, char y, unsigned num)
- {
- char i;
- for(i=12; i>=0; i-=4, x+=6)
- print_digit(x, y, (num >>i) & 0x0f);
- }
- void print_bin(char x, char y, unsigned num)
- {
- char i;
- for(i=15; i>=0; i--, x+=6)
- print_digit(x, y, (num >>i) & 0x01);
- }
- void draw_pixel(char x, char y)
- {
- char m = mask[y & 0x07];
- *(char *)(0x1000 + addr[y >> 3] + x) |= m;
- }
- void draw_circle(char xc, char yc, char r)
- {
- unsigned int x= r, y= 0;
- int cd2= 0;
- if (!r) return;
- draw_pixel(xc-r, yc);
- draw_pixel(xc+r, yc);
- draw_pixel(xc, yc-r);
- draw_pixel(xc, yc+r);
- while (x > y)
- {
- cd2-= (--x) - (++y);
- if (cd2 < 0) cd2+=x++;
- draw_pixel(xc-x, yc-y);
- draw_pixel(xc-y, yc-x);
- draw_pixel(xc+y, yc-x);
- draw_pixel(xc+x, yc-y);
- draw_pixel(xc-x, yc+y);
- draw_pixel(xc-y, yc+x);
- draw_pixel(xc+y, yc+x);
- draw_pixel(xc+x, yc+y);
- }
- }
- int main()
- {
- char a, i;
- for(i=0; i<=0xe; i++)
- print_digit(3 + font_offset[i], 6, i);
- for(a = 0; a <80; a++)
- draw_pixel(a+10, 5 +(a>>1));
- draw_circle(25, 20, 15);
- draw_circle(35, 25, 21);
- draw_circle(63, 30, 29);
- draw_circle(63, 30, 26);
- for(;;)
- ;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement