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