OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [mips/] [lib/] [tinycon.c] - Rev 1765

Compare with Previous | Blame | View Log

/*
 * arch/mips/lib/console.c
 *
 * Copyright (C) 1994 by Waldorf Electronic,
 * written by Ralf Baechle and Andreas Busse
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file COPYING in the main directory of this archive for
 * more details.
 *
 * FIXME: This file is hacked to be hardwired for the Deskstation
 *        Only thought as a debugging console output.  It's as inefficient
 *        as a piece of code can be but probably a good piece of code to
 *        implement a preliminary console for a new target.
 */
 
#include <linux/tty.h>
#include <asm/bootinfo.h>
 
static unsigned int size_x;
static unsigned int size_y;
static unsigned short cursor_x;
static unsigned short cursor_y;
static volatile unsigned short *vram_addr;
static int console_needs_init = 1;
 
extern struct screen_info screen_info;
 
/* ----------------------------------------------------------------------
 * init_console()
 * ---------------------------------------------------------------------- */
 
void init_console(void)
{
  size_x = 80;
  size_y = 25;
  cursor_x = 0;
  cursor_y = 0;
 
  vram_addr = (unsigned short *)0xb00b8000;
 
  console_needs_init = 0;
}
 
void
set_size_x(unsigned int x)
{
  size_x = x;
}
 
void
set_size_y(unsigned int y)
{
  size_y = y;
}
 
void
set_vram(unsigned short *vram)
{
  vram_addr = vram;
}
 
void
set_crsr(unsigned int x, unsigned int y)
{
  cursor_x = x;
  cursor_y = y;
}
 
void
print_char(unsigned int x, unsigned int y, unsigned char c)
{
  volatile unsigned short *caddr;
 
  caddr = vram_addr + (y * size_x) + x;
  *caddr = (*caddr & 0xff00) | 0x0f00 | (unsigned short) c;
}
 
static void
scroll(void)
{
  volatile unsigned short *caddr;
  register int i;
 
  caddr = vram_addr;
  for(i=0; i<size_x * (size_y-1); i++)
    *(caddr++) = *(caddr + size_x);
 
  /* blank last line */
 
  caddr = vram_addr + (size_x * (size_y-1));
  for(i=0; i<size_x; i++)
    *(caddr++) = (*caddr & 0xff00) | (unsigned short) ' ';
}
 
void print_string(const unsigned char *str)
{
  unsigned char c;
 
  if (console_needs_init)
    init_console();
 
  while((c = *str++))
    switch(c)
      {
      case '\n':
	cursor_x = 0;
	cursor_y++;
	if(cursor_y == size_y)
	  {
	    scroll();
	    cursor_y = size_y - 1;
	  }
	break;
 
      default:
	print_char(cursor_x, cursor_y, c);
	cursor_x++;
	if(cursor_x == size_x)
	  {
	    cursor_x = 0;
	    cursor_y++;
	    if(cursor_y == size_y)
	      {
		scroll();
		cursor_y = size_y - 1;
	      }
	  }
	break;
      }
}
 
/* end of file */
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.