Logo Search packages:      
Sourcecode: linux-2.6 version File versions

uncompress.h

/*
 *
 *  Copyright (C) 1996 Russell King
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
#define VIDMEM ((char *)0x02000000)
 
int video_num_columns, video_num_lines, video_size_row;
int white, bytes_per_char_h;
extern unsigned long con_charconvtable[256];

struct param_struct {
      unsigned long page_size;
      unsigned long nr_pages;
      unsigned long ramdisk_size;
      unsigned long mountrootrdonly;
      unsigned long rootdev;
      unsigned long video_num_cols;
      unsigned long video_num_rows;
      unsigned long video_x;
      unsigned long video_y;
      unsigned long memc_control_reg;
      unsigned char sounddefault;
      unsigned char adfsdrives;
      unsigned char bytes_per_char_h;
      unsigned char bytes_per_char_v;
      unsigned long unused[256/4-11];
};

static struct param_struct *params = (struct param_struct *)0x0207c000;
 
/*
 * This does not append a newline
 */
static void puts(const char *s)
{
      extern void ll_write_char(char *, unsigned long);
      int x,y;
      unsigned char c;
      char *ptr;

      x = params->video_x;
      y = params->video_y;

      while ( ( c = *(unsigned char *)s++ ) != '\0' ) {
            if ( c == '\n' ) {
                  x = 0;
                  if ( ++y >= video_num_lines ) {
                        y--;
                  }
            } else {
                  ptr = VIDMEM + ((y*video_num_columns*params->bytes_per_char_v+x)*bytes_per_char_h);
                  ll_write_char(ptr, c|(white<<16));
                  if ( ++x >= video_num_columns ) {
                        x = 0;
                        if ( ++y >= video_num_lines ) {
                              y--;
                        }
                  }
            }
      }

      params->video_x = x;
      params->video_y = y;
}

static void error(char *x);

/*
 * Setup for decompression
 */
static void arch_decomp_setup(void)
{
      int i;
      
      video_num_lines = params->video_num_rows;
      video_num_columns = params->video_num_cols;
      bytes_per_char_h = params->bytes_per_char_h;
      video_size_row = video_num_columns * bytes_per_char_h;
      if (bytes_per_char_h == 4)
            for (i = 0; i < 256; i++)
                  con_charconvtable[i] =
                        (i & 128 ? 1 << 0  : 0) |
                        (i & 64  ? 1 << 4  : 0) |
                        (i & 32  ? 1 << 8  : 0) |
                        (i & 16  ? 1 << 12 : 0) |
                        (i & 8   ? 1 << 16 : 0) |
                        (i & 4   ? 1 << 20 : 0) |
                        (i & 2   ? 1 << 24 : 0) |
                        (i & 1   ? 1 << 28 : 0);
      else
            for (i = 0; i < 16; i++)
                  con_charconvtable[i] =
                        (i & 8   ? 1 << 0  : 0) |
                        (i & 4   ? 1 << 8  : 0) |
                        (i & 2   ? 1 << 16 : 0) |
                        (i & 1   ? 1 << 24 : 0);

      white = bytes_per_char_h == 8 ? 0xfc : 7;

      if (params->nr_pages * params->page_size < 4096*1024) error("<4M of mem\n");
}

/*
 * nothing to do
 */
#define arch_decomp_wdog()

Generated by  Doxygen 1.6.0   Back to index