1 2 3#include <linux/tty.h> 4#include <asm/bootinfo.h> 5 6static unsigned int size_x; 7static unsigned int size_y; 8static unsigned short cursor_x; 9static unsigned short cursor_y; 10static volatile unsigned short *vram_addr; 11static int console_needs_init = 1; 12 13extern struct screen_info screen_info; 14 15/* ---------------------------------------------------------------------- 16 * init_console() 17 * ---------------------------------------------------------------------- */ 18 19void init_console(void) 20{ 21 size_x = 80; 22 size_y = 25; 23 cursor_x = 0; 24 cursor_y = 0; 25 26 vram_addr = (unsigned short *)0xb00b8000; 27 28 console_needs_init = 0; 29} 30 31void 32set_size_x(unsigned int x) 33{ 34 size_x = x; 35} 36 37void 38set_size_y(unsigned int y) 39{ 40 size_y = y; 41} 42 43void 44set_vram(unsigned short *vram) 45{ 46 vram_addr = vram; 47} 48 49void 50set_crsr(unsigned int x, unsigned int y) 51{ 52 cursor_x = x; 53 cursor_y = y; 54} 55 56void 57print_char(unsigned int x, unsigned int y, unsigned char c) 58{ 59 volatile unsigned short *caddr; 60 61 caddr = vram_addr + (y * size_x) + x; 62 *caddr = (*caddr & 0xff00) | 0x0f00 | (unsigned short) c; 63} 64 65static void 66scroll(void) 67{ 68 volatile unsigned short *caddr; 69 register int i; 70 71 caddr = vram_addr; 72 for(i=0; i<size_x * (size_y-1); i++) 73 *(caddr++) = *(caddr + size_x); 74 75 /* blank last line */ 76 77 caddr = vram_addr + (size_x * (size_y-1)); 78 for(i=0; i<size_x; i++) 79 *(caddr++) = (*caddr & 0xff00) | (unsigned short) ' '; 80} 81 82void print_string(const unsigned char *str) 83{ 84 unsigned char c; 85 86 if (console_needs_init) 87 init_console(); 88 89 while((c = *str++)) 90 switch(c) 91 { 92 case '\n': 93 cursor_x = 0; 94 cursor_y++; 95 if(cursor_y == size_y) 96 { 97 scroll(); 98 cursor_y = size_y - 1; 99 } 100 break; 101 102 default: 103 print_char(cursor_x, cursor_y, c); 104 cursor_x++; 105 if(cursor_x == size_x) 106 { 107 cursor_x = 0; 108 cursor_y++; 109 if(cursor_y == size_y) 110 { 111 scroll(); 112 cursor_y = size_y - 1; 113 } 114 } 115 break; 116 } 117} 118 119/* end of file */ 120