diff -u --recursive --new-file v2.1.110/linux/Documentation/VGA-softcursor.txt linux/Documentation/VGA-softcursor.txt --- v2.1.110/linux/Documentation/VGA-softcursor.txt Wed Jun 24 22:54:01 1998 +++ linux/Documentation/VGA-softcursor.txt Tue Jul 21 10:28:23 1998 @@ -31,3 +31,10 @@ The third parameter consists of character attribute bits you want to set. Bit setting takes place before bit toggling, so you can simply clear a bit by including it in both the set mask and the toggle mask. + +Examples: +========= + +To get normal blinking underline, use: echo -e '\033[?2c' +To get blinking block, use: echo -e '\033[?6c' +To get red non-blinking block, use: echo -e '\033[?17;0;64c' diff -u --recursive --new-file v2.1.110/linux/Makefile linux/Makefile --- v2.1.110/linux/Makefile Tue Jul 21 00:15:29 1998 +++ linux/Makefile Tue Jul 21 00:23:48 1998 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 1 -SUBLEVEL = 110 +SUBLEVEL = 111 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) diff -u --recursive --new-file v2.1.110/linux/arch/i386/defconfig linux/arch/i386/defconfig --- v2.1.110/linux/arch/i386/defconfig Tue Jul 21 00:15:30 1998 +++ linux/arch/i386/defconfig Tue Jul 21 11:39:16 1998 @@ -284,6 +284,8 @@ # Sound # # CONFIG_SOUND is not set +CONFIG_SOUND_OSS=n +CONFIG_LOWLEVEL_SOUND=n # # Kernel hacking diff -u --recursive --new-file v2.1.110/linux/drivers/char/console.c linux/drivers/char/console.c --- v2.1.110/linux/drivers/char/console.c Tue Jul 21 00:15:31 1998 +++ linux/drivers/char/console.c Tue Jul 21 10:28:23 1998 @@ -137,7 +137,6 @@ unsigned int cols, int do_clear); static void blank_screen(void); static void unblank_screen(void); -static void update_attr(int currcons); static void gotoxy(int currcons, int new_x, int new_y); static void save_cur(int currcons); static void reset_terminal(int currcons, int do_clear); @@ -145,8 +144,6 @@ static int printable = 0; /* Is console ready for printing? */ -static unsigned short console_charmask = 0x0ff; - int do_poke_blanked_console = 0; int console_blanked = 0; @@ -191,12 +188,6 @@ return p; } -/* FIXME: Can we do the whole scrollback logic here and call the driver - * only for changing the display? Yes, there is some magic with - * blanked screens, but we could unblank here. (Argh, there might - * be some problems with unblanking since this is called from real - * interrupts...) --mj - */ static inline void scrolldelta(int lines) { int currcons = fg_console; @@ -226,7 +217,6 @@ scrdown(int currcons, unsigned int t, unsigned int b, int nr) { unsigned short *s; - unsigned int count; unsigned int step; if (t+nr >= b) @@ -235,22 +225,68 @@ return; if (IS_VISIBLE && sw->con_scroll(vc_cons[currcons].d, t, b, SM_DOWN, nr)) return; - s = (unsigned short *) (origin+video_size_row*(b-nr-1)); + s = (unsigned short *) (origin+video_size_row*t); step = video_num_columns * nr; - count = b - t - nr; - while (count--) { - scr_memcpyw(s + step, s, video_size_row); - s -= video_num_columns; - } - count = nr; - while (count--) { - s += video_num_columns; - scr_memsetw(s, video_erase_char, video_size_row); + scr_memmovew(s + step, s, (b-t-nr)*video_size_row); + scr_memsetw(s, video_erase_char, 2*step); +} + +static void do_update_region(int currcons, unsigned long start, int count) +{ +#ifndef VT_BUF_VRAM_ONLY + unsigned int xx, yy, offset; + u16 *p; + + if (start < origin) { + count -= origin - start; + start = origin; + } + if (count <= 0) + return; + offset = (start - origin) / 2; + xx = offset % video_num_columns; + yy = offset / video_num_columns; + p = (u16 *) start; + for(;;) { + u16 attrib = scr_readw(p) & 0xff00; + int startx = xx; + u16 *q = p; + while (xx < video_num_columns && count) { + if (attrib != (scr_readw(p) & 0xff00)) { + if (p > q) + sw->con_putcs(vc_cons[currcons].d, q, p-q, yy, startx); + startx = xx; + q = p; + attrib = scr_readw(p) & 0xff00; + } + p++; + xx++; + count--; + } + if (p > q) + sw->con_putcs(vc_cons[currcons].d, q, p-q, yy, startx); + if (!count) + break; + xx = 0; + yy++; } +#endif } -static void update_attr(int currcons) +void update_region(int currcons, unsigned long start, int count) +{ + if (DO_UPDATE) + do_update_region(currcons, start, count); +} + +/* Structure of attributes is hardware-dependent */ + +static u8 build_attr(int currcons, u8 _color, u8 _intensity, u8 _blink, u8 _underline, u8 _reverse) { + if (sw->con_build_attr) + return sw->con_build_attr(vc_cons[currcons].d, _color, _intensity, _blink, _underline, _reverse); + +#ifndef VT_BUF_VRAM_ONLY /* * ++roman: I completely changed the attribute format for monochrome * mode (!can_do_color). The formerly used MDA (monochrome display @@ -260,74 +296,64 @@ * Bit 2 : underline * Bit 3 : reverse * Bit 7 : blink - * - * ++Geert: TODO: Because the attributes have different meanings - * for monochrome and color, they should really be converted if - * can_do_color changes... - * - * FIXME: Monochrome attributes on MDA/HGC/etc */ - if (!can_do_color) { - /* Special treatment for monochrome */ - attr = intensity | - (underline ? 4 : 0) | - ((reverse ^ decscnm) ? 8 : 0) | - (blink ? 0x80 : 0); - video_erase_char = ' ' | ((reverse ^ decscnm) ? 0x800 : 0); - return; - } - attr = color; - if (can_do_color) { - if (underline) - attr = (attr & 0xf0) | ulcolor; - else if (intensity == 0) - attr = (attr & 0xf0) | halfcolor; - } - if (reverse ^ decscnm) - attr = reverse_video_char(attr); - if (blink) - attr ^= 0x80; - if (intensity == 2) - attr ^= 0x08; - if (decscnm) - video_erase_char = (reverse_video_char(color) << 8) | ' '; - else - video_erase_char = (color << 8) | ' '; + { + u8 a = color; + if (!can_do_color) + return _intensity | + (_underline ? 4 : 0) | + (_reverse ? 8 : 0) | + (_blink ? 0x80 : 0); + if (_underline) + a = (a & 0xf0) | ulcolor; + else if (_intensity == 0) + a = (a & 0xf0) | halfcolor; + if (_reverse) + a = ((a) & 0x88) | ((((a) >> 4) | ((a) << 4)) & 0x77); + if (_blink) + a ^= 0x80; + if (_intensity == 2) + a ^= 0x08; + return a; + } +#else + return 0; +#endif +} + +static void update_attr(int currcons) +{ + attr = build_attr(currcons, color, intensity, blink, underline, reverse ^ decscnm); + video_erase_char = (build_attr(currcons, color, 1, 0, 0, decscnm) << 8) | ' '; } /* Note: inverting the screen twice should revert to the original state */ + void invert_screen(int currcons, int offset, int count, int viewed) { unsigned short *p; - int xx = (offset >> 1) % video_num_columns; - int yy = (offset >> 1) / video_num_columns; count /= 2; p = screenpos(currcons, offset, viewed); - if (can_do_color) - while (count--) { - unsigned short old = scr_readw(p); - unsigned short new = reverse_video_short(old); - scr_writew(new, p); - p++; - if (DO_UPDATE) { - sw->con_putc(vc_cons[currcons].d, new, yy, xx); - if (++xx == video_num_columns) - xx = 0, ++yy; - } - } - else - while (count--) { - unsigned short old = scr_readw(p); - unsigned short new = reverse_video_short_mono(old); - scr_writew(new, p); - p++; - if (DO_UPDATE) { - sw->con_putc(vc_cons[currcons].d, new, yy, xx); - if (++xx == video_num_columns) - xx = 0, ++yy; - } + if (sw->con_invert_region) + sw->con_invert_region(vc_cons[currcons].d, p, count); +#ifndef VT_BUF_VRAM_ONLY + else { + int col = can_do_color; + u16 *q = p; + int cnt = count; + + while (cnt--) { + u16 a = *q; + if (col) + a = ((a) & 0x88ff) | (((a) & 0x7000) >> 4) | (((a) & 0x0700) << 4); + else + a ^= 0x0800; + *q++ = a; } + } +#endif + update_region(currcons, (unsigned long) p, count); } /* used by selection: complement pointer position */ @@ -348,23 +374,16 @@ unsigned short new; p = screenpos(currcons, offset, 1); old = scr_readw(p); - oldx = (offset >> 1) % video_num_columns; - oldy = (offset >> 1) / video_num_columns; - new = complement_video_short(old); + new = old ^ complement_mask; scr_writew(new, p); - if (DO_UPDATE) + if (DO_UPDATE) { + oldx = (offset >> 1) % video_num_columns; + oldy = (offset >> 1) / video_num_columns; sw->con_putc(vc_cons[currcons].d, new, oldy, oldx); + } } } -/* used by selection - convert a screen word to a glyph number */ -int scrw2glyph(unsigned short scr_word) -{ - return ( video_mode_512ch ) - ? ((scr_word & 0x0800) >> 3) + (scr_word & 0x00ff) - : scr_word & 0x00ff; -} - static void insert_char(int currcons, unsigned int nr) { unsigned short *p, *q = (unsigned short *) pos; @@ -410,18 +429,45 @@ } } -static inline void hide_cursor(int currcons) +static int softcursor_original; + +static void add_softcursor(int currcons) +{ + int i = scr_readw((u16 *) pos); + u32 type = cursor_type; + + if (softcursor_original != -1) return; + softcursor_original = i; + if (! (type & 0x10)) return; + i |= ((type >> 8) & 0xff00 ); + i ^= ((type) & 0xff00 ); + if ((type & 0x20) && ((softcursor_original & 0x7000) == (i & 0x7000))) i ^= 0x7000; + if ((type & 0x40) && ((i & 0x700) == ((i & 0x7000) >> 4))) i ^= 0x0700; + scr_writew(i, (u16 *) pos); + if (DO_UPDATE) + sw->con_putc(vc_cons[currcons].d, i, y, x); +} + +static void hide_cursor(int currcons) { - sw->con_cursor(vc_cons[currcons].d,CM_ERASE); + if (softcursor_original != -1) { + scr_writew(softcursor_original,(u16 *) pos); + if (DO_UPDATE) + sw->con_putc(vc_cons[currcons].d, softcursor_original, y, x); + softcursor_original = -1; + } + sw->con_cursor(vc_cons[currcons].d,CM_ERASE); } void set_cursor(int currcons) { if (!IS_FG || console_blanked || vcmode == KD_GRAPHICS) return; - if (deccm) - sw->con_cursor(vc_cons[currcons].d,CM_DRAW); - else + if (deccm) { + add_softcursor(currcons); + if ((cursor_type & 0x0f) != 1) + sw->con_cursor(vc_cons[currcons].d,CM_DRAW); + } else hide_cursor(currcons); } @@ -451,8 +497,7 @@ { int currcons = fg_console; int redraw = 1; - int xx, yy, startx, attrib, old_console; - unsigned short *p, *q; + int old_console; static int lock = 0; struct vc_data **display; @@ -482,30 +527,11 @@ } if (redraw) { set_origin(currcons); - if (sw->con_switch (vc_cons[currcons].d)) { + if (sw->con_switch(vc_cons[currcons].d)) /* Update the screen contents */ - p = (unsigned short *)origin; - attrib = scr_readw(p) & 0xff00; - for (yy = 0; yy < video_num_lines; yy++) { - q = p; - for (startx = xx = 0; xx < video_num_columns; xx++) { - if (attrib != (scr_readw(p) & 0xff00)) { - if (p > q) - sw->con_putcs (vc_cons[currcons].d, q, - p - q, yy, startx); - startx = xx; - q = p; - attrib = (scr_readw(p) & 0xff00); - } - p++; - } - if (p > q) - sw->con_putcs (vc_cons[currcons].d, q, - p - q, yy, startx); - } - } + do_update_region(currcons, origin, screenbuf_size/2); } - set_cursor (currcons); + set_cursor(currcons); set_leds(); compute_shiftstate(); lock = 0; @@ -526,7 +552,11 @@ sw = conswitchp; cons_num = currcons; display_fg = &master_display_fg; + hi_font_mask = 0; + complement_mask = 0; sw->con_init(vc_cons[currcons].d, 1); + if (!complement_mask) + complement_mask = can_do_color ? 0x7700 : 0x0800; video_size_row = video_num_columns<<1; video_screen_size = video_num_lines*video_size_row; } @@ -577,17 +607,12 @@ * [this is to be used together with some user program * like resize that changes the hardware videomode] */ -/* FIXME: Cursor sometimes disappears when resizing */ -/* FIXME: We could also take data from the scrollback buffer */ int vc_resize(unsigned int lines, unsigned int cols, unsigned int first, unsigned int last) { unsigned int cc, ll, ss, sr, todo = 0; - unsigned int occ, oll, oss, osr; - unsigned short *p; unsigned int currcons = fg_console, i; unsigned short *newscreens[MAX_NR_CONSOLES]; - unsigned long ol, nl, rlth, rrem; cc = (cols ? cols : video_num_columns); ll = (lines ? lines : video_num_lines); @@ -599,7 +624,7 @@ (cc == video_num_columns && ll == video_num_lines)) newscreens[currcons] = NULL; else { - p = (unsigned short *) kmalloc(ss, GFP_USER); + unsigned short *p = (unsigned short *) kmalloc(ss, GFP_USER); if (!p) { for (i = 0; i< currcons; i++) if (newscreens[i]) @@ -614,6 +639,8 @@ return 0; for (currcons = first; currcons <= last; currcons++) { + unsigned int occ, oll, oss, osr; + unsigned long ol, nl, nlend, rlth, rrem; if (!newscreens[currcons] || !vc_cons_allocated(currcons)) continue; @@ -631,10 +658,12 @@ rrem = sr - rlth; ol = origin; nl = (long) newscreens[currcons]; + nlend = nl + ss; if (ll < oll) ol += (oll - ll) * osr; update_attr(currcons); + while (ol < scr_end) { scr_memcpyw((unsigned short *) nl, (unsigned short *) ol, rlth); if (rrem) @@ -642,7 +671,8 @@ ol += osr; nl += sr; } - + if (nlend > nl) + scr_memsetw((void *) nl, video_erase_char, nlend - nl); if (kmalloced) kfree_s(screenbuf, oss); screenbuf = newscreens[currcons]; @@ -650,9 +680,6 @@ screenbuf_size = ss; set_origin(currcons); - if (scr_end > nl) - scr_memsetw((void *) nl, video_erase_char, scr_end - nl); - /* do part of a reset_terminal() */ top = 0; bottom = video_num_lines; @@ -1111,7 +1138,6 @@ break; case 25: /* Cursor on/off */ deccm = on_off; - set_cursor(currcons); break; case 1000: report_mouse = on_off ? 2 : 0; @@ -1172,13 +1198,11 @@ bell_duration = DEFAULT_BELL_DURATION; break; case 12: /* bring specified console to the front */ - /* FIXME: Use console_bh for switching! */ if (par[1] >= 1 && vc_cons_allocated(par[1]-1)) - update_screen(par[1]-1); + set_console(par[1] - 1); break; case 13: /* unblank the screen */ - /* FIXME: call poke_blanked_console? */ - unblank_screen(); + poke_blanked_console(); break; case 14: /* set vesa powerdown interval */ vesa_off_interval = ((par[1] < 60) ? par[1] : 60) * 60 * HZ; @@ -1494,12 +1518,14 @@ set_mode(currcons,0); return; case 'c': - if (par[0]) - cursor_type = par[0] | (par[1]<<8) | (par[2]<<16); - else - cursor_type = CUR_DEFAULT; - set_cursor(currcons); - return; + if (ques) { + if (par[0]) + cursor_type = par[0] | (par[1]<<8) | (par[2]<<16); + else + cursor_type = CUR_DEFAULT; + return; + } + break; case 'n': if (!ques) { if (par[0] == 5) @@ -1698,6 +1724,7 @@ unsigned int currcons; unsigned long draw_from = 0, draw_to = 0; struct vt_struct *vt = (struct vt_struct *)tty->driver_data; + u16 himask, charmask; #if CONFIG_AP1000 ap_write(1,buf,count); @@ -1721,8 +1748,11 @@ return 0; /* ?? are error codes legal here ?? */ } + himask = hi_font_mask; + charmask = himask ? 0x1ff : 0xff; + /* undraw cursor first */ - if (DO_UPDATE) + if (IS_FG) hide_cursor(currcons); /* clear the selection */ @@ -1730,7 +1760,7 @@ clear_selection(); disable_bh(CONSOLE_BH); - while (count) { + while (!tty->stopped && count) { enable_bh(CONSOLE_BH); if (from_user) __get_user(c, buf); @@ -1810,7 +1840,7 @@ /* Bad hash table -- hope for the best */ tc = c; } - if (tc & ~console_charmask) + if (tc & ~charmask) continue; /* Conversion failed */ if (need_wrap || decim) @@ -1821,11 +1851,10 @@ } if (decim) insert_char(currcons, 1); - scr_writew(c = video_mode_512ch ? - ((attr & 0xf7) << 8) + ((tc & 0x100) << 3) + - (tc & 0x0ff) : (attr << 8) + tc, - (unsigned short *) pos); - + scr_writew(himask ? + ((attr & ~himask) << 8) + ((tc & 0x100) ? himask : 0) + (tc & 0xff) : + (attr << 8) + tc, + (u16 *) pos); if (DO_UPDATE && draw_x < 0) { draw_x = x; draw_from = pos; @@ -1862,6 +1891,7 @@ if (want_console >= 0) { if (want_console != fg_console) { clear_selection(); + hide_cursor(fg_console); save_screen(); change_console(want_console); /* we only changed when the console had already @@ -2364,6 +2394,7 @@ void do_blank_screen(int nopowersave) { int currcons = fg_console; + int i; if (console_blanked) return; @@ -2395,8 +2426,11 @@ } save_screen(); - sw->con_blank(vc_cons[currcons].d, 1); + /* In case we need to reset origin, blanking hook returns 1 */ + i = sw->con_blank(vc_cons[currcons].d, 1); console_blanked = fg_console + 1; + if (i) + set_origin(currcons); if(!nopowersave) { @@ -2523,85 +2557,80 @@ /* * Font switching * - * Currently we only support 8 pixels wide fonts, at a maximum height - * of 32 pixels. Userspace fontdata is stored with 32 bytes reserved - * for each character which is kinda wasty, but this is done in order - * to maintain compatibility with the EGA/VGA fonts. It is upto the - * actual low-level console-driver convert data into its favorite + * Currently we only support fonts up to 32 pixels wide, at a maximum height + * of 32 pixels. Userspace fontdata is stored with 32 bytes (shorts/ints, + * depending on width) reserved for each character which is kinda wasty, but + * this is done in order to maintain compatibility with the EGA/VGA fonts. It + * is upto the actual low-level console-driver convert data into its favorite * format (maybe we should add a `fontoffset' field to the `display' * structure so we wont have to convert the fontdata all the time. * /Jes */ -#define cmapsz 8192 +#define max_font_size 32768 -int con_set_font (char *arg, int w, int h, int chars) +int con_font_op(int currcons, struct console_font_op *op) { - int ch512; - int i = -EINVAL; - int s = cmapsz; - char *charmap; + int rc = -EINVAL; + int size, set; + u8 *temp; + struct console_font_op old_op; - if (vt_cons[fg_console]->vc_mode != KD_TEXT) + if (vt_cons[currcons]->vc_mode != KD_TEXT) goto quit; - if (w != 8 || h < 0 || h >= 32) - goto quit; - if (chars == 256) - ch512 = 0; - else if (chars == 512) { - ch512 = 1; - s += s; + memcpy(&old_op, &op, sizeof(op)); + if (op->op == KD_FONT_OP_SET) { + if (op->charcount > 512) + goto quit; + if (!op->height) { /* Need to guess font height [compat] */ + int h, i; + u8 *charmap = op->data, tmp; + rc = -EFAULT; + for (h = 32; h > 0; h--) + for (i = 0; i < op->charcount; i++) { + if (get_user(tmp, &charmap[32*i+h-1])) + goto quit; + if (tmp) + goto nonzero; + } + rc = -EINVAL; + goto quit; + nonzero: + rc = -EINVAL; + op->height = h; + } + if (op->width > 32 || op->height > 32) + goto quit; + size = (op->width+7)/8 * 32 * op->charcount; + if (size > max_font_size) + return -ENOSPC; + set = 1; + } else if (op->op == KD_FONT_OP_GET) { + size = max_font_size; + set = 0; } else - goto quit; - s = ch512 ? 2*cmapsz : cmapsz; - charmap = kmalloc(s, GFP_USER); - if (!charmap) + return sw->con_font_op(vc_cons[currcons].d, op); + temp = kmalloc(size, GFP_KERNEL); + if (!temp) return -ENOMEM; - i = -EFAULT; - if (copy_from_user(charmap, arg, s)) - goto done; - if (!h) { /* No height given, try guessing */ - for (h = 32; h > 0; h--) - for (i = 0; i < chars; i++) - if (charmap[32*i+h-1]) - goto nonzero; - return -EINVAL; /* Empty fonts not allowed */ - } - nonzero: - i = conswitchp->con_set_font(vc_cons[fg_console].d, w, h, charmap); - if ( !i ) { - hashtable_contents_valid = 0; - video_mode_512ch = ch512; - console_charmask = ch512 ? 0x1ff : 0x0ff; - } -done: - kfree(charmap); -quit: - return i; -} - -int con_get_font (char *arg, int *w, int *h, int *chars) -{ - int num = video_mode_512ch ? 512 : 256; - char *charmap; - int s = video_mode_512ch ? 2*cmapsz : cmapsz; - int i; - - if (num < *chars) - return -ENOSPC; - if (vt_cons[fg_console]->vc_mode != KD_TEXT) - return -EINVAL; - *chars = num; - *w = 8; - charmap = kmalloc(s, GFP_USER); - if (!charmap) - return -ENOMEM; - memset(charmap, 0, s); - i = conswitchp->con_get_font(vc_cons[fg_console].d, w, h, charmap); - if (!i && copy_to_user(arg, charmap, s)) - i = -EINVAL; - kfree(charmap); - return i; + if (set && copy_from_user(temp, op->data, size)) { + rc = -EFAULT; + goto quit2; + } + op->data = temp; + rc = sw->con_font_op(vc_cons[currcons].d, op); + op->data = old_op.data; + if (!rc && !set) { + int c = (op->width+7)/8 * 32 * op->charcount; + if (op->width > old_op.width || + op->height > old_op.height || + op->charcount > old_op.charcount) + rc = -ENOSPC; + else if (copy_to_user(old_op.data, op->data, c)) + rc = -EFAULT; + } +quit2: kfree_s(temp, size); +quit: return rc; } /* @@ -2609,9 +2638,14 @@ */ /* used by selection */ -unsigned short screen_word(int currcons, int offset, int viewed) +u16 screen_glyph(int currcons, int offset) { - return scr_readw(screenpos(currcons, offset, viewed)); + u16 w = scr_readw(screenpos(currcons, offset, 1)); + u16 c = w & 0xff; + + if (w & hi_font_mask) + c |= 0x100; + return c; } /* used by vcs - note the word offset */ diff -u --recursive --new-file v2.1.110/linux/drivers/char/console_macros.h linux/drivers/char/console_macros.h --- v2.1.110/linux/drivers/char/console_macros.h Tue Jul 21 00:15:31 1998 +++ linux/drivers/char/console_macros.h Tue Jul 21 10:28:23 1998 @@ -63,6 +63,8 @@ #define bell_duration (vc_cons[currcons].d->vc_bell_duration) #define cursor_type (vc_cons[currcons].d->vc_cursor_type) #define display_fg (vc_cons[currcons].d->vc_display_fg) +#define complement_mask (vc_cons[currcons].d->vc_complement_mask) +#define hi_font_mask (vc_cons[currcons].d->vc_hi_font_mask) #define vcmode (vt_cons[currcons]->vc_mode) diff -u --recursive --new-file v2.1.110/linux/drivers/char/selection.c linux/drivers/char/selection.c --- v2.1.110/linux/drivers/char/selection.c Thu Jul 16 18:09:25 1998 +++ linux/drivers/char/selection.c Tue Jul 21 10:28:23 1998 @@ -42,8 +42,6 @@ static int sel_buffer_lth = 0; static char *sel_buffer = NULL; -#define sel_pos(n) inverse_translate(scrw2glyph(screen_word(sel_cons, n, 1))) - /* clear_selection, highlight and highlight_pointer can be called from interrupt (via scrollback/front) */ @@ -57,6 +55,12 @@ inline static void highlight_pointer(const int where) { complement_pos(sel_cons, where); +} + +static unsigned char +sel_pos(int n) +{ + return inverse_translate(screen_glyph(sel_cons, n)); } /* remove the current selection highlight, if any, diff -u --recursive --new-file v2.1.110/linux/drivers/char/vc_screen.c linux/drivers/char/vc_screen.c --- v2.1.110/linux/drivers/char/vc_screen.c Wed Jul 1 19:38:54 1998 +++ linux/drivers/char/vc_screen.c Tue Jul 21 10:28:23 1998 @@ -20,6 +20,8 @@ * - making it shorter - scr_readw are macros which expand in PRETTY long code */ +#include + #include #include #include @@ -170,7 +172,7 @@ long p = *ppos; long viewed, attr, size, written; const char *buf0; - unsigned short *org = NULL; + u16 *org0 = NULL, *org = NULL; attr = (currcons & 128); currcons = (currcons & 127); @@ -193,7 +195,7 @@ buf0 = buf; if (!attr) { - org = screen_pos(currcons, p, viewed); + org0 = org = screen_pos(currcons, p, viewed); while (count > 0) { unsigned char c; count--; @@ -211,8 +213,8 @@ putconsxy(currcons, header+2); } if (count > 0) { - p -= HEADER_SIZE; - org = screen_pos(currcons, p/2, viewed); + p -= HEADER_SIZE; + org0 = org = screen_pos(currcons, p/2, viewed); if ((p & 1) && count > 0) { char c; count--; @@ -244,9 +246,8 @@ #endif } } - if (currcons == fg_console) - /* Horribly inefficient if count < screen size. */ - update_screen(currcons); + if (org0) + update_region(currcons, (unsigned long)(org0), org-org0); written = buf - buf0; *ppos += written; RETURN( written ); diff -u --recursive --new-file v2.1.110/linux/drivers/char/vt.c linux/drivers/char/vt.c --- v2.1.110/linux/drivers/char/vt.c Thu Jul 16 18:09:25 1998 +++ linux/drivers/char/vt.c Tue Jul 21 10:28:23 1998 @@ -32,6 +32,10 @@ #include #include +#ifdef CONFIG_FB_COMPAT_XPMAC +#include +#endif /* CONFIG_FB_COMPAT_XPMAC */ + char vt_dont_switch = 0; extern struct tty_driver console_driver; @@ -57,7 +61,6 @@ asmlinkage int sys_ioperm(unsigned long from, unsigned long num, int on); #endif -unsigned int video_mode_512ch; unsigned int video_font_height; unsigned int default_font_height; unsigned int video_scan_lines; @@ -215,9 +218,12 @@ if (kbd->kbdmode != VC_UNICODE) return -EINVAL; + /* ++Geert: non-PC keyboards may generate keycode zero */ +#if !defined(__mc68000__) && !defined(__powerpc__) /* assignment to entry 0 only tests validity of args */ if (!i) break; +#endif if (!(key_map = key_maps[s])) { int j; @@ -370,26 +376,37 @@ do_fontx_ioctl(int cmd, struct consolefontdesc *user_cfd, int perm) { struct consolefontdesc cfdarg; + struct console_font_op op; int i; if (copy_from_user(&cfdarg, user_cfd, sizeof(struct consolefontdesc))) return -EFAULT; - if (vt_cons[fg_console]->vc_mode != KD_TEXT) - return -EINVAL; switch (cmd) { case PIO_FONTX: if (!perm) return -EPERM; - return con_set_font(cfdarg.chardata, 8, cfdarg.charheight, cfdarg.charcount); + op.op = KD_FONT_OP_SET; + op.flags = 0; + op.width = 8; + op.height = cfdarg.charheight; + op.charcount = cfdarg.charcount; + op.data = cfdarg.chardata; + return con_font_op(fg_console, &op); case GIO_FONTX: { - int w, h; - int c= cfdarg.charcount; if (!cfdarg.chardata) return 0; - i = con_get_font(cfdarg.chardata, &w, &h, &c); + op.op = KD_FONT_OP_GET; + op.flags = 0; + op.width = 8; + op.height = cfdarg.charheight; + op.charcount = cfdarg.charcount; + op.data = cfdarg.chardata; + i = con_font_op(fg_console, &op); if (i) return i; + cfdarg.charheight = op.height; + cfdarg.charcount = op.charcount; if (copy_to_user(user_cfd, &cfdarg, sizeof(struct consolefontdesc))) return -EFAULT; return 0; @@ -929,14 +946,28 @@ return 0; } - case PIO_FONT: + case PIO_FONT: { + struct console_font_op op; if (!perm) return -EPERM; - return con_set_font((char *)arg, 8, 0, 256); + op.op = KD_FONT_OP_SET; + op.flags = KD_FONT_FLAG_DONT_RECALC; /* Compatibility */ + op.width = 8; + op.height = 0; + op.charcount = 256; + op.data = (char *) arg; + return con_font_op(fg_console, &op); + } case GIO_FONT: { - int w, h, s=256; - return con_get_font((char *)arg, &w, &h, &s); + struct console_font_op op; + op.op = KD_FONT_OP_GET; + op.flags = 0; + op.width = 8; + op.height = 32; + op.charcount = 256; + op.data = (char *) arg; + return con_font_op(fg_console, &op); } case PIO_CMAP: @@ -961,14 +992,31 @@ font is not saved. */ return -ENOSYS; #else - - i = con_set_font(NULL, 0, 0, 0); /* Set font to default */ + { + struct console_font_op op; + op.op = KD_FONT_SET_DEFAULT; + op.data = NULL; + i = con_font_op(fg_console, &op); if (i) return i; con_set_default_unimap(); return 0; + } #endif } + case KDFONTOP: { + struct console_font_op op; + if (copy_from_user(&op, (void *) arg, sizeof(op))) + return -EFAULT; + if (!perm && op.op != KD_FONT_OP_GET) + return -EPERM; + i = con_font_op(console, &op); + if (i) return i; + if (copy_to_user((void *) arg, &op, sizeof(op))) + return -EFAULT; + return 0; + } + case PIO_SCRNMAP: if (!perm) return -EPERM; @@ -1009,6 +1057,76 @@ return -EPERM; vt_dont_switch = 0; return 0; +#ifdef CONFIG_FB_COMPAT_XPMAC + case VC_GETMODE: + { + struct vc_mode mode; + + i = verify_area(VERIFY_WRITE, (void *) arg, + sizeof(struct vc_mode)); + if (i == 0) + i = console_getmode(&mode); + if (i) + return i; + if (copy_to_user((void *) arg, &mode, sizeof(mode))) + return -EFAULT; + return 0; + } + case VC_SETMODE: + case VC_INQMODE: + { + struct vc_mode mode; + + if (!perm) + return -EPERM; + i = verify_area(VERIFY_READ, (void *) arg, + sizeof(struct vc_mode)); + if (i) + return i; + if (copy_from_user(&mode, (void *) arg, sizeof(mode))) + return -EFAULT; + return console_setmode(&mode, cmd == VC_SETMODE); + } + case VC_SETCMAP: + { + unsigned char cmap[3][256], *p; + int n_entries, cmap_size, i, j; + + if (!perm) + return -EPERM; + if (arg == (unsigned long) VC_POWERMODE_INQUIRY + || arg <= VESA_POWERDOWN) { + /* compatibility hack: VC_POWERMODE + was changed from 0x766a to 0x766c */ + return console_powermode((int) arg); + } + i = verify_area(VERIFY_READ, (void *) arg, + sizeof(int)); + if (i) + return i; + if (get_user(cmap_size, (int *) arg)) + return -EFAULT; + if (cmap_size % 3) + return -EINVAL; + n_entries = cmap_size / 3; + if ((unsigned) n_entries > 256) + return -EINVAL; + p = (unsigned char *) (arg + sizeof(int)); + for (j = 0; j < n_entries; ++j) + for (i = 0; i < 3; ++i) + if (get_user(cmap[i][j], p++)) + return -EFAULT; + return console_setcmap(n_entries, cmap[0], + cmap[1], cmap[2]); + } + case VC_GETCMAP: + /* not implemented yet */ + return -ENOIOCTLCMD; + case VC_POWERMODE: + if (!perm) + return -EPERM; + return console_powermode((int) arg); +#endif /* CONFIG_FB_COMPAT_XPMAC */ default: return -ENOIOCTLCMD; } diff -u --recursive --new-file v2.1.110/linux/drivers/net/3c509.c linux/drivers/net/3c509.c --- v2.1.110/linux/drivers/net/3c509.c Tue Jul 21 00:15:31 1998 +++ linux/drivers/net/3c509.c Tue Jul 21 09:56:27 1998 @@ -775,10 +775,6 @@ MODULE_PARM(irq,"1-8i"); MODULE_PARM(xcvr,"1-8i"); -MODULE_PARM(debug,"i"); -MODULE_PARM(irq,"1-8i"); -MODULE_PARM(xcvr,"1-8i"); - int init_module(void) { diff -u --recursive --new-file v2.1.110/linux/drivers/net/apricot.c linux/drivers/net/apricot.c --- v2.1.110/linux/drivers/net/apricot.c Thu Feb 12 20:56:07 1998 +++ linux/drivers/net/apricot.c Wed Dec 31 16:00:00 1969 @@ -1,1031 +0,0 @@ -/* apricot.c: An Apricot 82596 ethernet driver for linux. */ -/* - Apricot - Written 1994 by Mark Evans. - This driver is for the Apricot 82596 bus-master interface - - Modularised 12/94 Mark Evans - - Driver skeleton - Written 1993 by Donald Becker. - Copyright 1993 United States Government as represented by the Director, - National Security Agency. This software may only be used and distributed - according to the terms of the GNU Public License as modified by SRC, - incorporated herein by reference. - - The author may be reached as becker@super.org or - C/O Supercomputing Research Ctr., 17100 Science Dr., Bowie MD 20715 - - -*/ - -static const char *version = "apricot.c:v0.2 05/12/94\n"; - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#ifndef HAVE_PORTRESERVE -#define check_region(addr, size) 0 -#define request_region(addr, size,name) do ; while(0) -#endif - -#ifndef HAVE_ALLOC_SKB -#define alloc_skb(size, priority) (struct sk_buff *) kmalloc(size,priority) -#define kfree_skbmem(buff, size) kfree_s(buff,size) -#endif - -#define APRICOT_DEBUG 1 - -#ifdef APRICOT_DEBUG -int i596_debug = APRICOT_DEBUG; -#else -int i596_debug = 1; -#endif - -#define APRICOT_TOTAL_SIZE 17 - -#define I596_NULL -1 - -#define CMD_EOL 0x8000 /* The last command of the list, stop. */ -#define CMD_SUSP 0x4000 /* Suspend after doing cmd. */ -#define CMD_INTR 0x2000 /* Interrupt after doing cmd. */ - -#define CMD_FLEX 0x0008 /* Enable flexible memory model */ - -enum commands { - CmdNOp = 0, CmdSASetup = 1, CmdConfigure = 2, CmdMulticastList = 3, - CmdTx = 4, CmdTDR = 5, CmdDump = 6, CmdDiagnose = 7}; - -#define STAT_C 0x8000 /* Set to 0 after execution */ -#define STAT_B 0x4000 /* Command being executed */ -#define STAT_OK 0x2000 /* Command executed ok */ -#define STAT_A 0x1000 /* Command aborted */ - -#define CUC_START 0x0100 -#define CUC_RESUME 0x0200 -#define CUC_SUSPEND 0x0300 -#define CUC_ABORT 0x0400 -#define RX_START 0x0010 -#define RX_RESUME 0x0020 -#define RX_SUSPEND 0x0030 -#define RX_ABORT 0x0040 - -struct i596_cmd { - unsigned short status; - unsigned short command; - struct i596_cmd *next; -}; - -#define EOF 0x8000 -#define SIZE_MASK 0x3fff - -struct i596_tbd { - unsigned short size; - unsigned short pad; - struct i596_tbd *next; - char *data; -}; - -struct tx_cmd { - struct i596_cmd cmd; - struct i596_tbd *tbd; - unsigned short size; - unsigned short pad; -}; - -struct i596_rfd { - unsigned short stat; - unsigned short cmd; - struct i596_rfd *next; - long rbd; - unsigned short count; - unsigned short size; - char data[1532]; -}; - -#define RX_RING_SIZE 8 - -struct i596_scb { - unsigned short status; - unsigned short command; - struct i596_cmd *cmd; - struct i596_rfd *rfd; - unsigned long crc_err; - unsigned long align_err; - unsigned long resource_err; - unsigned long over_err; - unsigned long rcvdt_err; - unsigned long short_err; - unsigned short t_on; - unsigned short t_off; -}; - -struct i596_iscp { - unsigned long stat; - struct i596_scb *scb; -}; - -struct i596_scp { - unsigned long sysbus; - unsigned long pad; - struct i596_iscp *iscp; -}; - -struct i596_private { - struct i596_scp scp; - struct i596_iscp iscp; - struct i596_scb scb; - struct i596_cmd set_add; - char eth_addr[8]; - struct i596_cmd set_conf; - char i596_config[16]; - struct i596_cmd tdr; - unsigned long stat; - int last_restart; - struct i596_rfd *rx_tail; - struct i596_cmd *cmd_tail; - struct i596_cmd *cmd_head; - int cmd_backlog; - unsigned long last_cmd; - struct net_device_stats stats; -}; - -char init_setup[] = { - 0x8E, /* length, prefetch on */ - 0xC8, /* fifo to 8, monitor off */ - 0x80, /* don't save bad frames */ - 0x2E, /* No source address insertion, 8 byte preamble */ - 0x00, /* priority and backoff defaults */ - 0x60, /* interframe spacing */ - 0x00, /* slot time LSB */ - 0xf2, /* slot time and retries */ - 0x00, /* promiscuous mode */ - 0x00, /* collision detect */ - 0x40, /* minimum frame length */ - 0xff, - 0x00, - 0x7f /* *multi IA */ }; - -static int i596_open(struct device *dev); -static int i596_start_xmit(struct sk_buff *skb, struct device *dev); -static void i596_interrupt(int irq, void *dev_id, struct pt_regs *regs); -static int i596_close(struct device *dev); -static struct net_device_stats *i596_get_stats(struct device *dev); -static void i596_add_cmd(struct device *dev, struct i596_cmd *cmd); -static void print_eth(char *); -static void set_multicast_list(struct device *dev); - - -static inline int -init_rx_bufs(struct device *dev, int num) -{ - struct i596_private *lp = (struct i596_private *)dev->priv; - int i; - struct i596_rfd *rfd; - - lp->scb.rfd = (struct i596_rfd *)I596_NULL; - - if (i596_debug > 1) printk ("%s: init_rx_bufs %d.\n", dev->name, num); - - for (i = 0; i < num; i++) - { - if (!(rfd = (struct i596_rfd *)kmalloc(sizeof(struct i596_rfd), GFP_KERNEL))) - break; - - rfd->stat = 0x0000; - rfd->rbd = I596_NULL; - rfd->count = 0; - rfd->size = 1532; - if (i == 0) - { - rfd->cmd = CMD_EOL; - lp->rx_tail = rfd; - } - else - rfd->cmd = 0x0000; - - rfd->next = lp->scb.rfd; - lp->scb.rfd = rfd; - } - - if (i != 0) - lp->rx_tail->next = lp->scb.rfd; - - return (i); -} - -static inline void -remove_rx_bufs(struct device *dev) -{ - struct i596_private *lp = (struct i596_private *)dev->priv; - struct i596_rfd *rfd = lp->scb.rfd; - - lp->rx_tail->next = (struct i596_rfd *)I596_NULL; - - do - { - lp->scb.rfd = rfd->next; - kfree(rfd); - rfd = lp->scb.rfd; - } - while (rfd != lp->rx_tail); -} - -static inline void -init_i596_mem(struct device *dev) -{ - struct i596_private *lp = (struct i596_private *)dev->priv; - short ioaddr = dev->base_addr; - int boguscnt = 100; - - /* change the scp address */ - outw(0, ioaddr); - outw(0, ioaddr); - outb(4, ioaddr+0xf); - outw(((((int)&lp->scp) & 0xffff) | 2), ioaddr); - outw((((int)&lp->scp)>>16) & 0xffff, ioaddr); - - lp->last_cmd = jiffies; - - lp->scp.sysbus = 0x00440000; - lp->scp.iscp = &(lp->iscp); - lp->iscp.scb = &(lp->scb); - lp->iscp.stat = 0x0001; - lp->cmd_backlog = 0; - - lp->cmd_head = lp->scb.cmd = (struct i596_cmd *) I596_NULL; - - if (i596_debug > 2) printk("%s: starting i82596.\n", dev->name); - - (void) inb (ioaddr+0x10); - outb(4, ioaddr+0xf); - outw(0, ioaddr+4); - - while (lp->iscp.stat) - if (--boguscnt == 0) - { - printk("%s: i82596 initialization timed out with status %4.4x, cmd %4.4x.\n", - dev->name, lp->scb.status, lp->scb.command); - break; - } - - lp->scb.command = 0; - - memcpy (lp->i596_config, init_setup, 14); - lp->set_conf.command = CmdConfigure; - i596_add_cmd(dev, &lp->set_conf); - - memcpy (lp->eth_addr, dev->dev_addr, 6); - lp->set_add.command = CmdSASetup; - i596_add_cmd(dev, &lp->set_add); - - lp->tdr.command = CmdTDR; - i596_add_cmd(dev, &lp->tdr); - - boguscnt = 200; - while (lp->scb.command) - if (--boguscnt == 0) - { - printk("%s: receive unit start timed out with status %4.4x, cmd %4.4x.\n", - dev->name, lp->scb.status, lp->scb.command); - break; - } - - lp->scb.command = RX_START; - outw(0, ioaddr+4); - - boguscnt = 200; - while (lp->scb.command) - if (--boguscnt == 0) - { - printk("i82596 init timed out with status %4.4x, cmd %4.4x.\n", - lp->scb.status, lp->scb.command); - break; - } - - return; -} - -static inline int -i596_rx(struct device *dev) -{ - struct i596_private *lp = (struct i596_private *)dev->priv; - int frames = 0; - - if (i596_debug > 3) printk ("i596_rx()\n"); - - while ((lp->scb.rfd->stat) & STAT_C) - { - if (i596_debug >2) print_eth(lp->scb.rfd->data); - - if ((lp->scb.rfd->stat) & STAT_OK) - { - /* a good frame */ - int pkt_len = lp->scb.rfd->count & 0x3fff; - struct sk_buff *skb = dev_alloc_skb(pkt_len); - - frames++; - - if (skb == NULL) - { - printk ("%s: i596_rx Memory squeeze, dropping packet.\n", dev->name); - lp->stats.rx_dropped++; - break; - } - - skb->dev = dev; - memcpy(skb_put(skb,pkt_len), lp->scb.rfd->data, pkt_len); - - skb->protocol=eth_type_trans(skb,dev); - netif_rx(skb); - lp->stats.rx_packets++; - lp->stats.rx_bytes+=pkt_len; - - if (i596_debug > 4) print_eth(skb->data); - } - else - { - lp->stats.rx_errors++; - if ((lp->scb.rfd->stat) & 0x0001) lp->stats.collisions++; - if ((lp->scb.rfd->stat) & 0x0080) lp->stats.rx_length_errors++; - if ((lp->scb.rfd->stat) & 0x0100) lp->stats.rx_over_errors++; - if ((lp->scb.rfd->stat) & 0x0200) lp->stats.rx_fifo_errors++; - if ((lp->scb.rfd->stat) & 0x0400) lp->stats.rx_frame_errors++; - if ((lp->scb.rfd->stat) & 0x0800) lp->stats.rx_crc_errors++; - if ((lp->scb.rfd->stat) & 0x1000) lp->stats.rx_length_errors++; - } - - lp->scb.rfd->stat = 0; - lp->rx_tail->cmd = 0; - lp->rx_tail = lp->scb.rfd; - lp->scb.rfd = lp->scb.rfd->next; - lp->rx_tail->count = 0; - lp->rx_tail->cmd = CMD_EOL; - - } - - if (i596_debug > 3) printk ("frames %d\n", frames); - - return 0; -} - -static inline void -i596_cleanup_cmd(struct i596_private *lp) -{ - struct i596_cmd *ptr; - int boguscnt = 100; - - if (i596_debug > 4) printk ("i596_cleanup_cmd\n"); - - while (lp->cmd_head != (struct i596_cmd *) I596_NULL) - { - ptr = lp->cmd_head; - - lp->cmd_head = lp->cmd_head->next; - lp->cmd_backlog--; - - switch ((ptr->command) & 0x7) - { - case CmdTx: - { - struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr; - struct sk_buff *skb = ((struct sk_buff *)(tx_cmd->tbd->data)) -1; - - dev_kfree_skb(skb); - - lp->stats.tx_errors++; - lp->stats.tx_aborted_errors++; - - ptr->next = (struct i596_cmd * ) I596_NULL; - kfree(tx_cmd); - break; - } - case CmdMulticastList: - { - ptr->next = (struct i596_cmd * ) I596_NULL; - kfree(ptr); - break; - } - default: - ptr->next = (struct i596_cmd * ) I596_NULL; - } - } - - while (lp->scb.command) - if (--boguscnt == 0) - { - printk("i596_cleanup_cmd timed out with status %4.4x, cmd %4.4x.\n", - lp->scb.status, lp->scb.command); - break; - } - - lp->scb.cmd = lp->cmd_head; -} - -static inline void -i596_reset(struct device *dev, struct i596_private *lp, int ioaddr) -{ - int boguscnt = 100; - - if (i596_debug > 4) printk ("i596_reset\n"); - - while (lp->scb.command) - if (--boguscnt == 0) - { - printk("i596_reset timed out with status %4.4x, cmd %4.4x.\n", - lp->scb.status, lp->scb.command); - break; - } - - dev->start = 0; - dev->tbusy = 1; - - lp->scb.command = CUC_ABORT|RX_ABORT; - outw(0, ioaddr+4); - - /* wait for shutdown */ - boguscnt = 400; - - while (lp->scb.command) - if (--boguscnt == 0) - { - printk("i596_reset 2 timed out with status %4.4x, cmd %4.4x.\n", - lp->scb.status, lp->scb.command); - break; - } - - i596_cleanup_cmd(lp); - i596_rx(dev); - - dev->start = 1; - dev->tbusy = 0; - dev->interrupt = 0; - init_i596_mem(dev); -} - -static void i596_add_cmd(struct device *dev, struct i596_cmd *cmd) -{ - struct i596_private *lp = (struct i596_private *)dev->priv; - int ioaddr = dev->base_addr; - unsigned long flags; - int boguscnt = 100; - - if (i596_debug > 4) printk ("i596_add_cmd\n"); - - cmd->status = 0; - cmd->command |= (CMD_EOL|CMD_INTR); - cmd->next = (struct i596_cmd *) I596_NULL; - - save_flags(flags); - cli(); - if (lp->cmd_head != (struct i596_cmd *) I596_NULL) - lp->cmd_tail->next = cmd; - else - { - lp->cmd_head = cmd; - while (lp->scb.command) - if (--boguscnt == 0) - { - printk("i596_add_cmd timed out with status %4.4x, cmd %4.4x.\n", - lp->scb.status, lp->scb.command); - break; - } - - lp->scb.cmd = cmd; - lp->scb.command = CUC_START; - outw (0, ioaddr+4); - } - lp->cmd_tail = cmd; - lp->cmd_backlog++; - - lp->cmd_head = lp->scb.cmd; - restore_flags(flags); - - if (lp->cmd_backlog > 16) - { - int tickssofar = jiffies - lp->last_cmd; - - if (tickssofar < 25) return; - - printk("%s: command unit timed out, status resetting.\n", dev->name); - - i596_reset(dev, lp, ioaddr); - } -} - -static int -i596_open(struct device *dev) -{ - int i; - - if (i596_debug > 1) - printk("%s: i596_open() irq %d.\n", dev->name, dev->irq); - - if (request_irq(dev->irq, &i596_interrupt, 0, "apricot", dev)) - return -EAGAIN; - - i = init_rx_bufs(dev, RX_RING_SIZE); - - if ((i = init_rx_bufs(dev, RX_RING_SIZE)) < RX_RING_SIZE) - printk("%s: only able to allocate %d receive buffers\n", dev->name, i); - - if (i < 4) - { - free_irq(dev->irq, dev); - return -EAGAIN; - } - - dev->tbusy = 0; - dev->interrupt = 0; - dev->start = 1; - MOD_INC_USE_COUNT; - - /* Initialize the 82596 memory */ - init_i596_mem(dev); - - return 0; /* Always succeed */ -} - -static int -i596_start_xmit(struct sk_buff *skb, struct device *dev) -{ - struct i596_private *lp = (struct i596_private *)dev->priv; - int ioaddr = dev->base_addr; - struct tx_cmd *tx_cmd; - - if (i596_debug > 2) printk ("%s: Apricot start xmit\n", dev->name); - - /* Transmitter timeout, serious problems. */ - if (dev->tbusy) { - int tickssofar = jiffies - dev->trans_start; - if (tickssofar < 5) - return 1; - printk("%s: transmit timed out, status resetting.\n", - dev->name); - lp->stats.tx_errors++; - /* Try to restart the adaptor */ - if (lp->last_restart == lp->stats.tx_packets) { - if (i596_debug > 1) printk ("Resetting board.\n"); - - /* Shutdown and restart */ - i596_reset(dev,lp, ioaddr); - } else { - /* Issue a channel attention signal */ - if (i596_debug > 1) printk ("Kicking board.\n"); - - lp->scb.command = CUC_START|RX_START; - outw(0, ioaddr+4); - - lp->last_restart = lp->stats.tx_packets; - } - dev->tbusy = 0; - dev->trans_start = jiffies; - } - - if (i596_debug > 3) printk("%s: i596_start_xmit() called\n", dev->name); - - /* Block a timer-based transmit from overlapping. This could better be - done with atomic_swap(1, dev->tbusy), but set_bit() works as well. */ - if (test_and_set_bit(0, (void*)&dev->tbusy) != 0) - printk("%s: Transmitter access conflict.\n", dev->name); - else - { - short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; - dev->trans_start = jiffies; - - tx_cmd = (struct tx_cmd *) kmalloc ((sizeof (struct tx_cmd) + sizeof (struct i596_tbd)), GFP_ATOMIC); - if (tx_cmd == NULL) - { - printk ("%s: i596_xmit Memory squeeze, dropping packet.\n", dev->name); - lp->stats.tx_dropped++; - - dev_kfree_skb(skb); - } - else - { - tx_cmd->tbd = (struct i596_tbd *) (tx_cmd + 1); - tx_cmd->tbd->next = (struct i596_tbd *) I596_NULL; - - tx_cmd->cmd.command = CMD_FLEX|CmdTx; - - tx_cmd->pad = 0; - tx_cmd->size = 0; - tx_cmd->tbd->pad = 0; - tx_cmd->tbd->size = EOF | length; - - tx_cmd->tbd->data = skb->data; - - if (i596_debug > 3) print_eth(skb->data); - - i596_add_cmd(dev, (struct i596_cmd *)tx_cmd); - - lp->stats.tx_packets++; - lp->stats.tx_bytes+=length; - } - } - - dev->tbusy = 0; - - return 0; -} - - -static void print_eth(char *add) -{ - int i; - - printk ("Dest "); - for (i = 0; i < 6; i++) - printk(" %2.2X", (unsigned char)add[i]); - printk ("\n"); - - printk ("Source"); - for (i = 0; i < 6; i++) - printk(" %2.2X", (unsigned char)add[i+6]); - printk ("\n"); - printk ("type %2.2X%2.2X\n", (unsigned char)add[12], (unsigned char)add[13]); -} - -__initfunc(int apricot_probe(struct device *dev)) -{ - int i; - struct i596_private *lp; - int checksum = 0; - int ioaddr = 0x300; - char eth_addr[6]; - - /* this is easy the ethernet interface can only be at 0x300 */ - /* first check nothing is already registered here */ - - if (check_region(ioaddr, APRICOT_TOTAL_SIZE)) - return ENODEV; - - for (i = 0; i < 8; i++) - { - eth_addr[i] = inb(ioaddr+8+i); - checksum += eth_addr[i]; - } - - /* checksum is a multiple of 0x100, got this wrong first time - some machines have 0x100, some 0x200. The DOS driver doesn't - even bother with the checksum */ - - if (checksum % 0x100) return ENODEV; - - /* Some other boards trip the checksum.. but then appear as ether - address 0. Trap these - AC */ - - if(memcmp(eth_addr,"\x00\x00\x49",3)!= 0) - return ENODEV; - - request_region(ioaddr, APRICOT_TOTAL_SIZE, "apricot"); - - dev->base_addr = ioaddr; - ether_setup(dev); - printk("%s: Apricot 82596 at %#3x,", dev->name, ioaddr); - - for (i = 0; i < 6; i++) - printk(" %2.2X", dev->dev_addr[i] = eth_addr[i]); - - dev->base_addr = ioaddr; - dev->irq = 10; - printk(" IRQ %d.\n", dev->irq); - - if (i596_debug > 0) printk(version); - - /* The APRICOT-specific entries in the device structure. */ - dev->open = &i596_open; - dev->stop = &i596_close; - dev->hard_start_xmit = &i596_start_xmit; - dev->get_stats = &i596_get_stats; - dev->set_multicast_list = &set_multicast_list; - - dev->mem_start = (int)kmalloc(sizeof(struct i596_private)+ 0x0f, GFP_KERNEL); - /* align for scp */ - dev->priv = (void *)((dev->mem_start + 0xf) & 0xfffffff0); - - lp = (struct i596_private *)dev->priv; - memset((void *)lp, 0, sizeof(struct i596_private)); - lp->scb.command = 0; - lp->scb.cmd = (struct i596_cmd *) I596_NULL; - lp->scb.rfd = (struct i596_rfd *)I596_NULL; - - return 0; -} - -static void -i596_interrupt(int irq, void *dev_id, struct pt_regs *regs) -{ - struct device *dev = dev_id; - struct i596_private *lp; - short ioaddr; - int boguscnt = 200; - unsigned short status, ack_cmd = 0; - - if (dev == NULL) { - printk ("i596_interrupt(): irq %d for unknown device.\n", irq); - return; - } - - if (i596_debug > 3) printk ("%s: i596_interrupt(): irq %d\n",dev->name, irq); - - if (dev->interrupt) - printk("%s: Re-entering the interrupt handler.\n", dev->name); - - dev->interrupt = 1; - - ioaddr = dev->base_addr; - - lp = (struct i596_private *)dev->priv; - - while (lp->scb.command) - if (--boguscnt == 0) - { - printk("%s: i596 interrupt, timeout status %4.4x command %4.4x.\n", dev->name, lp->scb.status, lp->scb.command); - break; - } - status = lp->scb.status; - - if (i596_debug > 4) - printk("%s: i596 interrupt, status %4.4x.\n", dev->name, status); - - ack_cmd = status & 0xf000; - - if ((status & 0x8000) || (status & 0x2000)) - { - struct i596_cmd *ptr; - - if ((i596_debug > 4) && (status & 0x8000)) - printk("%s: i596 interrupt completed command.\n", dev->name); - if ((i596_debug > 4) && (status & 0x2000)) - printk("%s: i596 interrupt command unit inactive %x.\n", dev->name, status & 0x0700); - - while ((lp->cmd_head != (struct i596_cmd *) I596_NULL) && (lp->cmd_head->status & STAT_C)) - { - ptr = lp->cmd_head; - - lp->cmd_head = lp->cmd_head->next; - lp->cmd_backlog--; - - switch ((ptr->command) & 0x7) - { - case CmdTx: - { - struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr; - struct sk_buff *skb = ((struct sk_buff *)(tx_cmd->tbd->data)) -1; - - dev_kfree_skb(skb); - - if ((ptr->status) & STAT_OK) - { - if (i596_debug >2) print_eth(skb->data); - } - else - { - lp->stats.tx_errors++; - if ((ptr->status) & 0x0020) lp->stats.collisions++; - if (!((ptr->status) & 0x0040)) lp->stats.tx_heartbeat_errors++; - if ((ptr->status) & 0x0400) lp->stats.tx_carrier_errors++; - if ((ptr->status) & 0x0800) lp->stats.collisions++; - if ((ptr->status) & 0x1000) lp->stats.tx_aborted_errors++; - } - - - ptr->next = (struct i596_cmd * ) I596_NULL; - kfree(tx_cmd); - break; - } - case CmdMulticastList: - { - ptr->next = (struct i596_cmd * ) I596_NULL; - kfree(ptr); - break; - } - case CmdTDR: - { - unsigned long status = *((unsigned long *) (ptr + 1)); - - if (status & 0x8000) - { - if (i596_debug > 3) - printk("%s: link ok.\n", dev->name); - } - else - { - if (status & 0x4000) - printk("%s: Transceiver problem.\n", dev->name); - if (status & 0x2000) - printk("%s: Termination problem.\n", dev->name); - if (status & 0x1000) - printk("%s: Short circuit.\n", dev->name); - - printk("%s: Time %ld.\n", dev->name, status & 0x07ff); - } - } - default: - ptr->next = (struct i596_cmd * ) I596_NULL; - - lp->last_cmd = jiffies; - } - } - - ptr = lp->cmd_head; - while ((ptr != (struct i596_cmd *) I596_NULL) && (ptr != lp->cmd_tail)) - { - ptr->command &= 0x1fff; - ptr = ptr->next; - } - - if ((lp->cmd_head != (struct i596_cmd *) I596_NULL) && (dev->start)) ack_cmd |= CUC_START; - lp->scb.cmd = lp->cmd_head; - } - - if ((status & 0x1000) || (status & 0x4000)) - { - if ((i596_debug > 4) && (status & 0x4000)) - printk("%s: i596 interrupt received a frame.\n", dev->name); - if ((i596_debug > 4) && (status & 0x1000)) - printk("%s: i596 interrupt receive unit inactive %x.\n", dev->name, status & 0x0070); - - i596_rx(dev); - - if (dev->start) ack_cmd |= RX_START; - } - - /* acknowledge the interrupt */ - -/* - if ((lp->scb.cmd != (struct i596_cmd *) I596_NULL) && (dev->start)) ack_cmd | = CUC_START; -*/ - boguscnt = 100; - while (lp->scb.command) - if (--boguscnt == 0) - { - printk("%s: i596 interrupt, timeout status %4.4x command %4.4x.\n", dev->name, lp->scb.status, lp->scb.command); - break; - } - lp->scb.command = ack_cmd; - - (void) inb (ioaddr+0x10); - outb (4, ioaddr+0xf); - outw (0, ioaddr+4); - - if (i596_debug > 4) - printk("%s: exiting interrupt.\n", dev->name); - - dev->interrupt = 0; - return; -} - -static int -i596_close(struct device *dev) -{ - int ioaddr = dev->base_addr; - struct i596_private *lp = (struct i596_private *)dev->priv; - int boguscnt = 200; - - dev->start = 0; - dev->tbusy = 1; - - if (i596_debug > 1) - printk("%s: Shutting down ethercard, status was %4.4x.\n", - dev->name, lp->scb.status); - - lp->scb.command = CUC_ABORT|RX_ABORT; - outw(0, ioaddr+4); - - i596_cleanup_cmd(lp); - - while (lp->scb.command) - if (--boguscnt == 0) - { - printk("%s: close timed timed out with status %4.4x, cmd %4.4x.\n", - dev->name, lp->scb.status, lp->scb.command); - break; - } - free_irq(dev->irq, dev); - remove_rx_bufs(dev); - MOD_DEC_USE_COUNT; - - return 0; -} - -static struct net_device_stats * -i596_get_stats(struct device *dev) -{ - struct i596_private *lp = (struct i596_private *)dev->priv; - - return &lp->stats; -} - -/* - * Set or clear the multicast filter for this adaptor. - */ - -static void set_multicast_list(struct device *dev) -{ - struct i596_private *lp = (struct i596_private *)dev->priv; - struct i596_cmd *cmd; - - if (i596_debug > 1) - printk ("%s: set multicast list %d\n", dev->name, dev->mc_count); - - if (dev->mc_count > 0) - { - struct dev_mc_list *dmi; - char *cp; - cmd = (struct i596_cmd *) kmalloc(sizeof(struct i596_cmd)+2+dev->mc_count*6, GFP_ATOMIC); - if (cmd == NULL) - { - printk ("%s: set_multicast Memory squeeze.\n", dev->name); - return; - } - cmd->command = CmdMulticastList; - *((unsigned short *) (cmd + 1)) = dev->mc_count * 6; - cp=((char *)(cmd + 1))+2; - for(dmi=dev->mc_list;dmi!=NULL;dmi=dmi->next) - { - memcpy(cp, dmi,6); - cp+=6; - } - print_eth (((char *)(cmd + 1)) + 2); - i596_add_cmd(dev, cmd); - } - else - { - if (lp->set_conf.next != (struct i596_cmd * ) I596_NULL) - return; - if (dev->mc_count == 0 && !(dev->flags&(IFF_PROMISC|IFF_ALLMULTI))) - { - if(dev->flags&IFF_ALLMULTI) - dev->flags|=IFF_PROMISC; - lp->i596_config[8] &= ~0x01; - } - else - lp->i596_config[8] |= 0x01; - - i596_add_cmd(dev, &lp->set_conf); - } -} - -#ifdef HAVE_DEVLIST -static unsigned int apricot_portlist[] __initdata = {0x300, 0}; -struct netdev_entry apricot_drv = -{"apricot", apricot_probe, APRICOT_TOTAL_SIZE, apricot_portlist}; -#endif - -#ifdef MODULE -static char devicename[9] = { 0, }; -static struct device dev_apricot = { - devicename, /* device name inserted by /linux/drivers/net/net_init.c */ - 0, 0, 0, 0, - 0x300, 10, - 0, 0, 0, NULL, apricot_probe }; - -static int io = 0x300; -static int irq = 10; -MODULE_PARM(irq, "i"); - -int -init_module(void) -{ - dev_apricot.base_addr = io; - dev_apricot.irq = irq; - if (register_netdev(&dev_apricot) != 0) - return -EIO; - return 0; -} - -void -cleanup_module(void) -{ - unregister_netdev(&dev_apricot); - kfree((void*)dev_apricot.mem_start); - dev_apricot.priv = NULL; - - /* If we don't do this, we can't re-insmod it later. */ - release_region(dev_apricot.base_addr, APRICOT_TOTAL_SIZE); -} -#endif /* MODULE */ - -/* - * Local variables: - * compile-command: "gcc -D__KERNEL__ -I/usr/src/linux/net/inet -Wall -Wstrict-prototypes -O6 -m486 -c apricot.c" - * End: - */ diff -u --recursive --new-file v2.1.110/linux/drivers/net/tlan.c linux/drivers/net/tlan.c --- v2.1.110/linux/drivers/net/tlan.c Tue Jul 21 00:15:31 1998 +++ linux/drivers/net/tlan.c Tue Jul 21 11:39:16 1998 @@ -779,7 +779,7 @@ if ( ! priv->phyOnline ) { TLAN_DBG( TLAN_DEBUG_TX, "TLAN TRANSMIT: %s PHY is not ready\n", dev->name ); - dev_kfree_skb( skb, FREE_WRITE ); + dev_kfree_skb( skb ); return 0; } @@ -837,7 +837,7 @@ CIRC_INC( priv->txTail, TLAN_NUM_TX_LISTS ); if ( bbuf ) { - dev_kfree_skb( skb, FREE_WRITE ); + dev_kfree_skb( skb ); } dev->trans_start = jiffies; @@ -1126,7 +1126,7 @@ head_list = priv->txList + priv->txHead; if ( ! bbuf ) { - dev_kfree_skb( (struct sk_buff *) head_list->buffer[9].address, FREE_WRITE ); + dev_kfree_skb( (struct sk_buff *) head_list->buffer[9].address ); head_list->buffer[9].address = 0; } @@ -1692,7 +1692,7 @@ list = priv->txList + i; skb = (struct sk_buff *) list->buffer[9].address; if ( skb ) { - dev_kfree_skb( skb, FREE_WRITE ); + dev_kfree_skb( skb ); list->buffer[9].address = 0; } } @@ -1701,7 +1701,7 @@ list = priv->rxList + i; skb = (struct sk_buff *) list->buffer[9].address; if ( skb ) { - dev_kfree_skb( skb, FREE_READ ); + dev_kfree_skb( skb ); list->buffer[9].address = 0; } } diff -u --recursive --new-file v2.1.110/linux/drivers/scsi/scsi.c linux/drivers/scsi/scsi.c --- v2.1.110/linux/drivers/scsi/scsi.c Wed Jul 1 19:38:55 1998 +++ linux/drivers/scsi/scsi.c Tue Jul 21 11:39:16 1998 @@ -397,7 +397,7 @@ up(SCpnt->request.sem); } -void scsi_logging_setup(char *str, int *ints) +__initfunc(void scsi_logging_setup(char *str, int *ints)) { if (ints[0] != 1) { printk("scsi_logging_setup : usage scsi_logging_level=n " @@ -413,7 +413,7 @@ static int max_scsi_luns = 1; #endif -void scsi_luns_setup(char *str, int *ints) +__initfunc(void scsi_luns_setup(char *str, int *ints)) { if (ints[0] != 1) printk("scsi_luns_setup : usage max_scsi_luns=n (n should be between 1 and 8)\n"); diff -u --recursive --new-file v2.1.110/linux/drivers/video/Config.in linux/drivers/video/Config.in --- v2.1.110/linux/drivers/video/Config.in Tue Jul 21 00:15:31 1998 +++ linux/drivers/video/Config.in Tue Jul 21 10:28:24 1998 @@ -5,7 +5,7 @@ if [ "$CONFIG_FB" = "y" ]; then define_bool CONFIG_DUMMY_CONSOLE y if [ "$CONFIG_ARCH_ACORN" = "y" ]; then - define_bool CONFIG_FB_ACORN y + bool 'Acorn VIDC support' CONFIG_FB_ACORN fi if [ "$CONFIG_APOLLO" = "y" ]; then define_bool CONFIG_FB_APOLLO y @@ -51,7 +51,9 @@ # with xconfig. --pb if [ "$ARCH" = "i386" -o "$ARCH" = "alpha" -o "$ARCH" = "ppc" -o \ "$CONFIG_ARM" = "y" ]; then - tristate 'VGA chipset support (text only)' CONFIG_FB_VGA + if [ "$CONFIG_ARM" != "y" -o "$CONFIG_ARCH_ACORN" != "y" ] ; then + tristate 'VGA chipset support (text only)' CONFIG_FB_VGA + fi fi if [ "$ARCH" = "alpha" ]; then tristate 'TGA framebuffer support' CONFIG_FB_TGA @@ -69,6 +71,8 @@ fi bool ' CGsix (GX,GXplus) support' CONFIG_FB_CGSIX fi + fi + if [ "$ARCH" = "sparc64" ]; then if [ "$CONFIG_PCI" != "n" ]; then bool 'PCI framebuffers' CONFIG_FB_PCI if [ "$CONFIG_FB_PCI" != "n" ]; then @@ -122,15 +126,15 @@ fi fi if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_ATARI" = "y" -o \ - "$CONFIG_FB_MAC" = "y" -o "$CONFIG_FB_OF" = "y" -o \ - "$CONFIG_FB_TGA" = "y" -o "$CONFIG_FB_VESA" = "y" -o \ - "$CONFIG_FB_VIRTUAL" = "y" ]; then + "$CONFIG_FB_ATY" = "y" -o "$CONFIG_FB_MAC" = "y" -o \ + "$CONFIG_FB_OF" = "y" -o "$CONFIG_FB_TGA" = "y" -o \ + "$CONFIG_FB_VESA" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" ]; then define_bool CONFIG_FBCON_CFB8 y else if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_ATARI" = "m" -o \ - "$CONFIG_FB_MAC" = "m" -o "$CONFIG_FB_OF" = "m" -o \ - "$CONFIG_FB_TGA" = "m" -o "$CONFIG_FB_VESA" = "m" -o \ - "$CONFIG_FB_VIRTUAL" = "m" ]; then + "$CONFIG_FB_ATY" = "y" -o "$CONFIG_FB_MAC" = "y" -o \ + "$CONFIG_FB_OF" = "m" -o "$CONFIG_FB_TGA" = "m" -o \ + "$CONFIG_FB_VESA" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" ]; then define_bool CONFIG_FBCON_CFB8 m fi fi @@ -195,6 +199,41 @@ else if [ "$CONFIG_FB_MDA" = "m" -o "$CONFIG_FB_VGA" = "m" ]; then define_bool CONFIG_FBCON_VGA m + fi + fi + fi + if [ "$ARCH" = "sparc" -o "$ARCH" = "sparc64" ]; then + bool 'Sparc console 8x16 font' CONFIG_FONT_SUN8x16 + bool 'Sparc console 12x22 font (not supported by all drivers)' CONFIG_FONT_SUN12x22 + bool 'Select other fonts' CONFIG_FBCON_FONTS + if [ "$CONFIG_FBCON_FONTS" = "y" ]; then + bool ' VGA 8x8 font' CONFIG_FONT_8x8 + bool ' VGA 8x16 font' CONFIG_FONT_8x16 + bool ' Mac console 6x11 font (not supported by all drivers)' CONFIG_FONT_6x11 + bool ' Pearl (old m68k) console 8x8 font' CONFIG_FONT_PEARL_8x8 + bool ' Acorn console 8x8 font' CONFIG_FONT_ACORN_8x8 + fi + else + bool 'Select compiled-in fonts' CONFIG_FBCON_FONTS + if [ "$CONFIG_FBCON_FONTS" = "y" ]; then + bool ' VGA 8x8 font' CONFIG_FONT_8x8 + bool ' VGA 8x16 font' CONFIG_FONT_8x16 + bool ' Sparc console 8x16 font' CONFIG_FONT_SUN8x16 + bool ' Sparc console 12x22 font (not supported by all drivers)' CONFIG_FONT_SUN12x22 + bool ' Mac console 6x11 font (not supported by all drivers)' CONFIG_FONT_6x11 + bool ' Pearl (old m68k) console 8x8 font' CONFIG_FONT_PEARL_8x8 + bool ' Acorn console 8x8 font' CONFIG_FONT_ACORN_8x8 + else + define_bool CONFIG_FONT_8x8 y + define_bool CONFIG_FONT_8x16 y + if [ "$CONFIG_MAC" = "y" ]; then + define_bool CONFIG_FONT_6x11 y + fi + if [ "$CONFIG_AMIGA" = "y" ]; then + define_bool CONFIG_FONT_PEARL_8x8 y + fi + if [ "$CONFIG_ARM" = "y" ]; then + define_bool CONFIG_FONT_ACORN_8x8 y fi fi fi diff -u --recursive --new-file v2.1.110/linux/drivers/video/Makefile linux/drivers/video/Makefile --- v2.1.110/linux/drivers/video/Makefile Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/Makefile Tue Jul 21 10:28:24 1998 @@ -34,12 +34,41 @@ endif ifeq ($(CONFIG_FB),y) - L_OBJS += fonts.o font_8x8.o font_8x16.o pearl_8x8.o font_6x11.o font_sun8x16.o font_sun12x22.o + L_OBJS += fonts.o OX_OBJS += fbcon.o fbcmap.o # fbgen is not compiled by default since nobody uses it yet + ifeq ($(CONFIG_FONT_8x8),y) + L_OBJS += font_8x8.o + endif + ifeq ($(CONFIG_FONT_8x16),y) + L_OBJS += font_8x16.o + endif + ifeq ($(CONFIG_FONT_SUN8x16),y) + L_OBJS += font_sun8x16.o + endif + ifeq ($(CONFIG_FONT_SUN12x22),y) + L_OBJS += font_sun12x22.o + endif + ifeq ($(CONFIG_FONT_6x11),y) + L_OBJS += font_6x11.o + endif + ifeq ($(CONFIG_FONT_ACORN_8x8),y) + L_OBJS += font_acorn_8x8.o + endif + ifeq ($(CONFIG_FONT_PEARL_8x8),y) + L_OBJS += font_pearl_8x8.o + endif endif # Frame Buffer Devices + +ifeq ($(CONFIG_FB_ACORN),y) +L_OBJS += acornfb.o +else + ifeq ($(CONFIG_FB_ACORN),m) + M_OBJS += acornfb.o + endif +endif ifeq ($(CONFIG_FB_AMIGA),y) L_OBJS += amifb.o diff -u --recursive --new-file v2.1.110/linux/drivers/video/S3triofb.c linux/drivers/video/S3triofb.c --- v2.1.110/linux/drivers/video/S3triofb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/S3triofb.c Tue Jul 21 10:28:24 1998 @@ -111,7 +111,7 @@ * Text console acceleration */ -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 static struct display_switch fbcon_trio8; #endif @@ -568,7 +568,7 @@ disp.line_length = fb_fix.line_length; disp.can_soft_blank = 1; disp.inverse = 0; -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 if (fb_var.accel_flags & FB_ACCELF_TEXT) disp.dispsw = &fbcon_trio8; else @@ -576,6 +576,7 @@ #else disp.dispsw = NULL; #endif + disp.scrollmode = fb_var.accel_flags & FB_ACCELF_TEXT ? 0 : SCROLL_YREDRAW; strcpy(fb_info.modename, "Trio64 "); strncat(fb_info.modename, dp->full_name, sizeof(fb_info.modename)); @@ -831,7 +832,7 @@ * Text console acceleration */ -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 static void fbcon_trio8_bmove(struct display *p, int sy, int sx, int dy, int dx, int height, int width) { @@ -878,6 +879,7 @@ static struct display_switch fbcon_trio8 = { fbcon_cfb8_setup, fbcon_trio8_bmove, fbcon_trio8_clear, fbcon_trio8_putc, - fbcon_trio8_putcs, fbcon_trio8_revc, NULL, NULL, FONTWIDTH(8) + fbcon_trio8_putcs, fbcon_trio8_revc, NULL, NULL, fbcon_cfb8_clear_margins, + FONTWIDTH(8) }; #endif diff -u --recursive --new-file v2.1.110/linux/drivers/video/acornfb.c linux/drivers/video/acornfb.c --- v2.1.110/linux/drivers/video/acornfb.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/video/acornfb.c Tue Jul 21 10:28:24 1998 @@ -0,0 +1,382 @@ +/* + * linux/drivers/video/acorn.c + * + * Copyright (C) 1998 Russell King + * + * Frame buffer code for Acorn platforms + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "fbcon-mfb.h" +#include "fbcon-cfb2.h" +#include "fbcon-cfb4.h" +#include "fbcon-cfb8.h" + +#define MAX_VIDC20_PALETTE 256 +#define MAX_VIDC_PALETTE 16 + +struct acornfb_par { + unsigned long screen_base; + unsigned int xres; + unsigned int yres; + unsigned char bits_per_pixel; + unsigned int palette_size; + + union { + union { + struct { + unsigned long red:8; + unsigned long green:8; + unsigned long blue:8; + unsigned long ext:4; + unsigned long unused:4; + } d; + unsigned long p; + } vidc20[MAX_VIDC20_PALETTE]; + union { + struct { + unsigned long red:4; + unsigned long green:4; + unsigned long blue:4; + unsigned long trans:1; + unsigned long unused:19; + } d; + unsigned long p; + } vidc[MAX_VIDC_PALETTE]; + } palette; +}; + +static int currcon = 0; +static struct display disp; +static struct fb_info fb_info; +static struct acornfb_par current_par; + +static int +acornfb_open(struct fb_info *info, int user) +{ + MOD_INC_USE_COUNT; + return 0; +} + +static int +acornfb_release(struct fb_info *info, int user) +{ + MOD_DEC_USE_COUNT; + return 0; +} + +static void +acornfb_encode_var(struct fb_var_screeninfo *var, struct acornfb_par *par) +{ + var->xres = par->xres; + var->yres = par->yres; + var->xres_virtual = par->xres; + var->yres_virtual = par->yres; + var->xoffset = 0; + var->yoffset = 0; + var->bits_per_pixel = par->bits_per_pixel; + var->grayscale = 0; + var->red.offset = 0; + var->red.length = 8; + var->red.msb_right = 0; + var->green.offset = 0; + var->green.length = 8; + var->green.msb_right = 0; + var->blue.offset = 0; + var->blue.length = 8; + var->blue.msb_right = 0; + var->transp.offset = 0; + var->transp.length = 4; + var->transp.msb_right = 0; + var->nonstd = 0; + var->activate = FB_ACTIVATE_NOW; + var->height = -1; + var->width = -1; + var->vmode = FB_VMODE_NONINTERLACED; + var->pixclock = 1; + var->sync = 0; + var->left_margin = 0; + var->right_margin = 0; + var->upper_margin = 0; + var->lower_margin = 0; + var->hsync_len = 0; + var->vsync_len = 0; +} + +static int +acornfb_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info) +{ + struct acornfb_par *par = ¤t_par; + unsigned int line_length; + + memset(fix, 0, sizeof(struct fb_fix_screeninfo)); + strcpy(fix->id, "Acorn"); + + line_length = par->xres * par->bits_per_pixel / 8; + + fix->smem_start = (char *)SCREEN2_BASE; + fix->smem_len = (((line_length * par->yres) - 1) | (PAGE_SIZE - 1)) + 1; + fix->type = FB_TYPE_PACKED_PIXELS; + fix->type_aux = 0; + fix->visual = FB_VISUAL_PSEUDOCOLOR; + fix->xpanstep = 0; + fix->ypanstep = 0; + fix->ywrapstep = 1; + fix->line_length = line_length; + fix->accel = FB_ACCEL_NONE; + + return 0; +} + +static int +acornfb_get_var(struct fb_var_screeninfo *var, int con, struct fb_info *info) +{ + if (con == -1) { + acornfb_encode_var(var, ¤t_par); + } else + *var = fb_display[con].var; + return 0; +} + +static int +acornfb_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info) +{ + return 0; +} + +static void +acornfb_set_disp(int con) +{ + struct fb_fix_screeninfo fix; + struct display *display; + + if (con >= 0) + display = &fb_display[con]; + else + display = &disp; + + current_par.xres = 8 * ORIG_VIDEO_COLS; + current_par.yres = 8 * ORIG_VIDEO_LINES; + current_par.bits_per_pixel = 8; + current_par.palette_size = MAX_VIDC20_PALETTE; + + acornfb_get_fix(&fix, con, 0); + + acornfb_get_var(&display->var, con, 0); + + display->cmap.start = 0; + display->cmap.len = 0; + display->cmap.red = NULL; + display->cmap.green = NULL; + display->cmap.blue = NULL; + display->cmap.transp = NULL; + display->screen_base = fix.smem_start; + display->visual = fix.visual; + display->type = fix.type; + display->type_aux = fix.type_aux; + display->ypanstep = fix.ypanstep; + display->ywrapstep = fix.ywrapstep; + display->line_length = fix.line_length; + display->can_soft_blank = 0; + display->inverse = 0; + + outl(SCREEN_START, VDMA_START); + outl(SCREEN_START + fix.smem_len - VDMA_XFERSIZE, VDMA_END); + outl(SCREEN_START, VDMA_INIT); + + switch (display->var.bits_per_pixel) { +#ifdef FBCON_HAS_MFB + case 1: + display->dispsw = &fbcon_mfb; + break; +#endif +#ifdef FBCON_HAS_CFB2 + case 2: + display->dispsw = &fbcon_cfb2; + break; +#endif +#ifdef FBCON_HAS_CFB4 + case 4: + display->dispsw = &fbcon_cfb4; + break; +#endif +#ifdef FBCON_HAS_CFB8 + case 8: + display->dispsw = &fbcon_cfb8; + break; +#endif + default: + display->dispsw = NULL; + break; + } +} + +static int +acornfb_vidc20_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue, u_int *trans, struct fb_info *info) +{ + if (regno >= current_par.palette_size) + return 1; + *red = current_par.palette.vidc20[regno].d.red; + *green = current_par.palette.vidc20[regno].d.green; + *blue = current_par.palette.vidc20[regno].d.blue; + *trans = current_par.palette.vidc20[regno].d.ext; + return 0; +} + +static int +acornfb_vidc20_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int trans, struct fb_info *info) +{ + if (regno >= current_par.palette_size) + return 1; + + current_par.palette.vidc20[regno].p = 0; + current_par.palette.vidc20[regno].d.red = red; + current_par.palette.vidc20[regno].d.green = green; + current_par.palette.vidc20[regno].d.blue = blue; + + outl(0x10000000 | regno, VIDC_BASE); + outl(current_par.palette.vidc20[regno].p, VIDC_BASE); + + return 0; +} + +static int +acornfb_get_cmap(struct fb_cmap *cmap, int kspc, int con, + struct fb_info *info) +{ + int err = 0; + + if (con == currcon) + err = fb_get_cmap(cmap, &fb_display[con].var, + kspc, acornfb_vidc20_getcolreg, info); + else if (fb_display[con].cmap.len) + fb_copy_cmap(&fb_display[con].cmap, cmap, kspc ? 0 : 2); + else + fb_copy_cmap(fb_default_cmap(current_par.palette_size), + cmap, kspc ? 0 : 2); + return err; +} + +static int +acornfb_set_cmap(struct fb_cmap *cmap, int kspc, int con, + struct fb_info *info) +{ + int err = 0; + + if (!fb_display[con].cmap.len) + err = fb_alloc_cmap(&fb_display[con].cmap, + current_par.palette_size, 0); + if (!err) { + if (con == currcon) + err = fb_set_cmap(cmap, &fb_display[con].var, + kspc, acornfb_vidc20_setcolreg, info); + else + fb_copy_cmap(cmap, &fb_display[con].cmap, + kspc ? 0 : 1); + } + return err; +} + +static int +acornfb_pan_display(struct fb_var_screeninfo *var, int con, + struct fb_info *info) +{ + if (var->xoffset || var->yoffset) + return -EINVAL; + else + return 0; +} + +static int +acornfb_ioctl(struct inode *ino, struct file *file, unsigned int cmd, + unsigned long arg, int con, struct fb_info *info) +{ + return -ENOIOCTLCMD; +} + +static struct fb_ops acornfb_ops = { + acornfb_open, + acornfb_release, + acornfb_get_fix, + acornfb_get_var, + acornfb_set_var, + acornfb_get_cmap, + acornfb_set_cmap, + acornfb_pan_display, + acornfb_ioctl +}; + +void +acornfb_setup(char *options, int *ints) +{ +} + +static int +acornfb_update_var(int con, struct fb_info *info) +{ + if (con == currcon) { + int off = fb_display[con].var.yoffset * + fb_display[con].var.xres_virtual * + fb_display[con].var.bits_per_pixel >> 3; + unsigned long base; + + base = current_par.screen_base = SCREEN_START + off; + + outl (SCREEN_START + base, VDMA_INIT); + } + + return 0; +} + +static int +acornfb_switch(int con, struct fb_info *info) +{ + currcon = con; + acornfb_update_var(con, info); + return 0; +} + +static void +acornfb_blank(int blank, struct fb_info *info) +{ +} + +__initfunc(unsigned long +acornfb_init(unsigned long mem_start)) +{ + strcpy(fb_info.modename, "Acorn"); + fb_info.node = -1; + fb_info.fbops = &acornfb_ops; + fb_info.disp = &disp; + fb_info.monspecs.hfmin = 0; + fb_info.monspecs.hfmax = 0; + fb_info.monspecs.vfmin = 0; + fb_info.monspecs.vfmax = 0; + fb_info.monspecs.dpms = 0; + strcpy(fb_info.fontname, "Acorn8x8"); + fb_info.changevar = NULL; + fb_info.switch_con = acornfb_switch; + fb_info.updatevar = acornfb_update_var; + fb_info.blank = acornfb_blank; + + acornfb_set_disp(-1); + fb_set_cmap(fb_default_cmap(current_par.palette_size), &fb_display[0].var, + 1, acornfb_vidc20_setcolreg, &fb_info); + register_framebuffer(&fb_info); + + return mem_start; +} diff -u --recursive --new-file v2.1.110/linux/drivers/video/amifb.c linux/drivers/video/amifb.c --- v2.1.110/linux/drivers/video/amifb.c Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/amifb.c Tue Jul 21 10:28:24 1998 @@ -1486,17 +1486,17 @@ display->can_soft_blank = 1; display->inverse = amifb_inverse; switch (fix.type) { -#ifdef CONFIG_FBCON_ILBM +#ifdef FBCON_HAS_ILBM case FB_TYPE_INTERLEAVED_PLANES: display->dispsw = &fbcon_ilbm; break; #endif -#ifdef CONFIG_FBCON_AFB +#ifdef FBCON_HAS_AFB case FB_TYPE_PLANES: display->dispsw = &fbcon_afb; break; #endif -#ifdef CONFIG_FBCON_MFB +#ifdef FBCON_HAS_MFB case FB_TYPE_PACKED_PIXELS: /* depth == 1 */ display->dispsw = &fbcon_mfb; break; @@ -2129,7 +2129,7 @@ fix->smem_start = (char *)videomemory; fix->smem_len = videomemorysize; -#ifdef CONFIG_FBCON_MFB +#ifdef FBCON_HAS_MFB if (par->bpp == 1) { fix->type = FB_TYPE_PACKED_PIXELS; fix->type_aux = 0; diff -u --recursive --new-file v2.1.110/linux/drivers/video/atafb.c linux/drivers/video/atafb.c --- v2.1.110/linux/drivers/video/atafb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/atafb.c Tue Jul 21 10:28:24 1998 @@ -71,24 +71,12 @@ #include #include -#ifdef CONFIG_FBCON_CFB8 #include "fbcon-cfb8.h" -#endif -#ifdef CONFIG_FBCON_CFB16 #include "fbcon-cfb16.h" -#endif -#ifdef CONFIG_FBCON_IPLAN2P2 #include "fbcon-iplan2p2.h" -#endif -#ifdef CONFIG_FBCON_IPLAN2P4 #include "fbcon-iplan2p4.h" -#endif -#ifdef CONFIG_FBCON_IPLAN2P8 #include "fbcon-iplan2p8.h" -#endif -#ifdef CONFIG_FBCON_MFB #include "fbcon-mfb.h" -#endif #define SWITCH_ACIA 0x01 /* modes for switch on OverScan */ @@ -1654,7 +1642,7 @@ (((red & 0xe) >> 1) | ((red & 1) << 3) << 8) | (((green & 0xe) >> 1) | ((green & 1) << 3) << 4) | ((blue & 0xe) >> 1) | ((blue & 1) << 3); -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 fbcon_cfb16_cmap[regno] = (red << 11) | (green << 5) | blue; #endif } @@ -2484,17 +2472,17 @@ switch (fix.type) { case FB_TYPE_INTERLEAVED_PLANES: switch (var.bits_per_pixel) { -#ifdef CONFIG_FBCON_IPLAN2P2 +#ifdef FBCON_HAS_IPLAN2P2 case 2: display->dispsw = &fbcon_iplan2p2; break; #endif -#ifdef CONFIG_FBCON_IPLAN2P4 +#ifdef FBCON_HAS_IPLAN2P4 case 4: display->dispsw = &fbcon_iplan2p4; break; #endif -#ifdef CONFIG_FBCON_IPLAN2P8 +#ifdef FBCON_HAS_IPLAN2P8 case 8: display->dispsw = &fbcon_iplan2p8; break; @@ -2503,17 +2491,17 @@ break; case FB_TYPE_PACKED_PIXELS: switch (var.bits_per_pixel) { -#ifdef CONFIG_FBCON_MFB +#ifdef FBCON_HAS_MFB case 1: display->dispsw = &fbcon_mfb; break; #endif -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 case 8: display->dispsw = &fbcon_cfb8; break; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 case 16: display->dispsw = &fbcon_cfb16; break; diff -u --recursive --new-file v2.1.110/linux/drivers/video/aty.h linux/drivers/video/aty.h --- v2.1.110/linux/drivers/video/aty.h Wed Jun 24 22:54:07 1998 +++ linux/drivers/video/aty.h Tue Jul 21 10:28:24 1998 @@ -692,30 +692,6 @@ /* ATI PCI constants */ #define PCI_ATI_VENDOR_ID 0x1002 -/* mach64GX family */ -#define PCI_MACH64_GX 0x4758 /* mach64GX (ATI888GX00) */ -#define PCI_MACH64_CX 0x4358 /* mach64CX (ATI888CX00) */ - -/* mach64CT family */ -#define PCI_MACH64_CT 0x4354 /* mach64CT (ATI264CT) */ -#define PCI_MACH64_ET 0x4554 /* mach64ET (ATI264ET) */ - -/* mach64CT family / mach64VT class */ -#define PCI_MACH64_VT 0x5654 /* mach64VT (ATI264VT) */ -#define PCI_MACH64_VTB 0x5655 /* mach64VTB (ATI264VTB) */ -#define PCI_MACH64_VT4 0x5656 /* mach64VT4 (ATI264VT4) */ - -/* mach64CT family / mach64GT (3D RAGE) class */ -#define PCI_MACH64_GB 0x4742 /* RAGE PRO, BGA, AGP 1x and 2x */ -#define PCI_MACH64_GD 0x4744 /* RAGE PRO, BGA, AGP 1x only */ -#define PCI_MACH64_GI 0x4749 /* RAGE PRO, BGA, PCI33 only */ -#define PCI_MACH64_GP 0x4750 /* RAGE PRO, PQFP, PCI33, full 3D */ -#define PCI_MACH64_GQ 0x4751 /* RAGE PRO, PQFP, PCI33, limited 3D */ -#define PCI_MACH64_GT 0x4754 /* 3D RAGE II/II+ */ -#define PCI_MACH64_GTB 0x4755 /* 3D II+ */ -#define PCI_MACH64_GTC 0x4756 /* 3D RAGE IIC */ -#define PCI_MACH64_LT 0x4c47 /* 3D RAGE LT */ - /* CONFIG_CHIP_ID register constants */ #define CFG_CHIP_TYPE 0x0000FFFF @@ -729,28 +705,30 @@ /* Chip IDs read from CONFIG_CHIP_ID */ /* mach64GX family */ -#define MACH64_GX_ID 0xD7 /* mach64GX (ATI888GX00) */ -#define MACH64_CX_ID 0x57 /* mach64CX (ATI888CX00) */ +#define GX_CHIP_ID 0xD7 /* mach64GX (ATI888GX00) */ +#define CX_CHIP_ID 0x57 /* mach64CX (ATI888CX00) */ + +#define GX_PCI_ID 0x4758 /* mach64GX (ATI888GX00) */ +#define CX_PCI_ID 0x4358 /* mach64CX (ATI888CX00) */ /* mach64CT family */ -#define MACH64_CT_ID PCI_MACH64_CT -#define MACH64_ET_ID PCI_MACH64_ET +#define CT_CHIP_ID 0x4354 /* mach64CT (ATI264CT) */ +#define ET_CHIP_ID 0x4554 /* mach64ET (ATI264ET) */ /* mach64CT family / mach64VT class */ -#define MACH64_VT_ID PCI_MACH64_VT -#define MACH64_VTB_ID PCI_MACH64_VTB -#define MACH64_VT4_ID PCI_MACH64_VT4 +#define VT_CHIP_ID 0x5654 /* mach64VT (ATI264VT) */ +#define VU_CHIP_ID 0x5655 /* mach64VTB (ATI264VTB) */ /* mach64CT family / mach64GT (3D RAGE) class */ -#define MACH64_GB_ID PCI_MACH64_GB -#define MACH64_GD_ID PCI_MACH64_GD -#define MACH64_GI_ID PCI_MACH64_GI -#define MACH64_GP_ID PCI_MACH64_GP -#define MACH64_GQ_ID PCI_MACH64_GQ -#define MACH64_GT_ID PCI_MACH64_GT -#define MACH64_GTB_ID PCI_MACH64_GTB -#define MACH64_GTC_ID PCI_MACH64_GTC -#define MACH64_LT_ID PCI_MACH64_LT +#define LT_CHIP_ID 0x4c54 /* 3D RAGE LT */ +#define LG_CHIP_ID 0x4c47 /* 3D RAGE LG */ +#define GT_CHIP_ID 0x4754 /* 3D RAGE (GT) */ +#define GU_CHIP_ID 0x4755 /* 3D RAGE II/II+ (GTB) */ +#define GB_CHIP_ID 0x4742 /* RAGE PRO, BGA, AGP 1x and 2x */ +#define GD_CHIP_ID 0x4744 /* RAGE PRO, BGA, AGP 1x only */ +#define GI_CHIP_ID 0x4749 /* RAGE PRO, BGA, PCI33 only */ +#define GP_CHIP_ID 0x4750 /* RAGE PRO, PQFP, PCI33, full 3D */ +#define GQ_CHIP_ID 0x4751 /* RAGE PRO, PQFP, PCI33, limited 3D */ /* Mach64 major ASIC revisions */ diff -u --recursive --new-file v2.1.110/linux/drivers/video/atyfb.c linux/drivers/video/atyfb.c --- v2.1.110/linux/drivers/video/atyfb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/atyfb.c Tue Jul 21 10:28:24 1998 @@ -3,6 +3,7 @@ * * Copyright (C) 1997 Geert Uytterhoeven * Copyright (C) 1998 Bernd Harries + * Copyright (C) 1998 Eddie C. Dost * * This driver is partly based on the PowerMac console driver: * @@ -27,6 +28,22 @@ - support arbitrary video modes + (ecd): + + - fix initialization and allocation of resources for cursor (and disp?). + + - fix initialization of cursor timer. + + - add code to detect ramdac type on initialization. + + - add code to support cursor on all cards and all ramdacs. + + - make cursor parameters controllable via ioctl()s. + + - handle arbitrary fonts. + + (Anyone to help with all this?) + ******************************************************************************/ #include @@ -42,6 +59,7 @@ #include #include #include +#include #include #include #include @@ -52,6 +70,7 @@ #if defined(CONFIG_PMAC) || defined(CONFIG_CHRP) #include #include +#include "macmodes.h" #endif #ifdef __sparc__ #include @@ -250,6 +269,23 @@ unsigned long prot_mask; }; +#define DEFAULT_CURSOR_BLINK_RATE (20) + +struct aty_cursor { + int enable; + int on; + int vbl_cnt; + int blink_rate; + u32 offset; + struct { + u16 x, y; + } pos, hot, size; + u32 color[2]; + u8 bits[8][64]; + u8 mask[8][64]; + struct timer_list *timer; +}; + struct fb_info_aty { struct fb_info fb_info; unsigned long ati_regbase_phys; @@ -257,6 +293,7 @@ unsigned long frame_buffer_phys; unsigned long frame_buffer; struct pci_mmap_map *mmap_map; + struct aty_cursor *cursor; u8 chip_class; u8 pixclock_lim_8; /* ps, <= 8 bpp */ u8 pixclock_lim_hi; /* ps, > 8 bpp */ @@ -418,27 +455,17 @@ * Text console acceleration */ -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 static struct display_switch fbcon_aty8; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 static struct display_switch fbcon_aty16; #endif -#ifdef CONFIG_FBCON_CFB32 +#ifdef FBCON_HAS_CFB32 static struct display_switch fbcon_aty32; #endif -#ifdef CONFIG_FB_COMPAT_XPMAC -extern struct vc_mode display_info; -extern struct fb_info *console_fb_info; -extern int (*console_setmode_ptr)(struct vc_mode *, int); -extern int (*console_set_cmap_ptr)(struct fb_cmap *, int, int, - struct fb_info *); -static int atyfb_console_setmode(struct vc_mode *, int); -#endif /* CONFIG_FB_COMPAT_XPMAC */ - - /* * Internal routines */ @@ -482,9 +509,14 @@ temp = info->ati_regbase; asm("lwbrx %0,%1,%2": "=r"(val):"r"(regindex), "r"(temp)); #else +#ifdef __sparc__v9__ + temp = info->ati_regbase + regindex; + asm("lduwa [%1] %2, %0" : "=r" (val) : "r" (temp), "i" (ASI_PL)); +#else temp = info->ati_regbase+regindex; val = le32_to_cpu(*((volatile u32 *)(temp))); #endif +#endif return val; } @@ -497,9 +529,14 @@ temp = info->ati_regbase; asm("stwbrx %0,%1,%2": : "r"(val), "r"(regindex), "r"(temp):"memory"); #else +#ifdef __sparc__v9__ + temp = info->ati_regbase + regindex; + asm("stwa %0, [%1] %2" : "r" (val), "r" (temp), "i" (ASI_PL) : "memory"); +#else temp = info->ati_regbase+regindex; *((volatile u32 *)(temp)) = cpu_to_le32(val); #endif +#endif } static inline u8 aty_ld_8(volatile unsigned int regindex, @@ -648,7 +685,7 @@ /* set pixel depth */ wait_for_fifo(2, info); switch(par->hw.gx.cmode) { -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 case CMODE_8: aty_st_le32(DP_PIX_WIDTH, HOST_8BPP | SRC_8BPP | DST_8BPP | BYTE_ORDER_LSB_TO_MSB, @@ -656,7 +693,7 @@ aty_st_le32(DP_CHAIN_MASK, 0x8080, info); break; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 case CMODE_16: aty_st_le32(DP_PIX_WIDTH, HOST_15BPP | SRC_15BPP | DST_15BPP | BYTE_ORDER_LSB_TO_MSB, @@ -672,7 +709,7 @@ aty_st_le32(DP_CHAIN_MASK, 0x8080, info); break; #endif -#ifdef CONFIG_FBCON_CFB32 +#ifdef FBCON_HAS_CFB32 case CMODE_32: aty_st_le32(DP_PIX_WIDTH, HOST_32BPP | SRC_32BPP | DST_32BPP | BYTE_ORDER_LSB_TO_MSB, info); @@ -804,6 +841,226 @@ aty_st_le32(CRTC_OFF_PITCH, pitch<<22 | offset, info); } +/* + * Hardware Cursor support. + */ + +static u8 cursor_pixel_map[2] = { 0, 15 }; +static u8 cursor_color_map[2] = { 0, 0xff }; + +static u8 cursor_bits_lookup[16] = +{ + 0x00, 0x40, 0x10, 0x50, 0x04, 0x44, 0x14, 0x54, + 0x01, 0x41, 0x11, 0x51, 0x05, 0x45, 0x15, 0x55 +}; + +static u8 cursor_mask_lookup[16] = +{ + 0xaa, 0x2a, 0x8a, 0x0a, 0xa2, 0x22, 0x82, 0x02, + 0xa8, 0x28, 0x88, 0x08, 0xa0, 0x20, 0x80, 0x00 +}; + +static void +aty_set_cursor_color(struct fb_info_aty *fb, u8 *pixel, + u8 *red, u8 *green, u8 *blue) +{ + struct aty_cursor *c = fb->cursor; + int i; + + if (!c) + return; + + for (i = 0; i < 2; i++) { + c->color[i] = (u32)red[i] << 24; + c->color[i] |= (u32)green[i] << 16; + c->color[i] |= (u32)blue[i] << 8; + c->color[i] |= (u32)pixel[i]; + } + + wait_for_fifo(2, fb); + aty_st_le32(CUR_CLR0, c->color[0], fb); + aty_st_le32(CUR_CLR1, c->color[1], fb); + wait_for_idle(fb); +} + +static void +aty_set_cursor_shape(struct fb_info_aty *fb) +{ + struct aty_cursor *c = fb->cursor; + u8 *ram, m, b; + int x, y; + + if (!c) + return; + + ram = (u8 *)(fb->frame_buffer + c->offset); + + for (y = 0; y < c->size.y; y++) { + for (x = 0; x < c->size.x >> 2; x++) { + m = c->mask[x][y]; + b = c->bits[x][y]; + *ram++ = cursor_mask_lookup[m >> 4] | + cursor_bits_lookup[(b & m) >> 4]; + *ram++ = cursor_mask_lookup[m & 0x0f] | + cursor_bits_lookup[(b & m) & 0x0f]; + } + for ( ; x < 8; x++) { + *ram++ = 0xaa; + *ram++ = 0xaa; + } + } + memset(ram, 0xaa, (64 - c->size.y) * 16); +} + +static void +aty_set_cursor(struct fb_info_aty *fb) +{ + struct aty_cursor *c = fb->cursor; + u16 xoff, yoff; + int x, y; + + if (!c) + return; + + if (c->on) { + x = c->pos.x - c->hot.x; + if (x < 0) { + xoff = -x; + x = 0; + } else { + xoff = 0; + } + + y = c->pos.y - c->hot.y; + if (y < 0) { + yoff = -y; + y = 0; + } else { + yoff = 0; + } + + wait_for_fifo(4, fb); + aty_st_le32(CUR_OFFSET, (c->offset >> 3) + (yoff << 1), fb); + aty_st_le32(CUR_HORZ_VERT_OFF, + ((u32)(64 - c->size.y + yoff) << 16) | xoff, fb); + aty_st_le32(CUR_HORZ_VERT_POSN, ((u32)y << 16) | x, fb); + aty_st_le32(GEN_TEST_CNTL, aty_ld_le32(GEN_TEST_CNTL, fb) + | HWCURSOR_ENABLE, fb); + } else { + wait_for_fifo(4, fb); + aty_st_le32(GEN_TEST_CNTL, + aty_ld_le32(GEN_TEST_CNTL, fb) & ~HWCURSOR_ENABLE, + fb); + } + wait_for_idle(fb); +} + +static void +aty_cursor_timer_handler(unsigned long dev_addr) +{ + struct fb_info_aty *fb = (struct fb_info_aty *)dev_addr; + + if (!fb->cursor) + return; + + if (!fb->cursor->enable) + goto out; + + if (fb->cursor->vbl_cnt && --fb->cursor->vbl_cnt == 0) { + fb->cursor->on ^= 1; + aty_set_cursor(fb); + fb->cursor->vbl_cnt = fb->cursor->blink_rate; + } + +out: + fb->cursor->timer->expires = jiffies + (HZ / 50); + add_timer(fb->cursor->timer); +} + +static void +atyfb_cursor(struct display *d, int mode, int x, int y) +{ + struct fb_info_aty *fb = (struct fb_info_aty *)d->fb_info; + struct aty_cursor *c = fb->cursor; + + if (!c) + return; + + x *= d->fontwidth; + y *= d->fontheight; + if (c->pos.x == x && c->pos.y == y && (mode == CM_ERASE) == !c->on) + return; + + c->enable = 0; + c->pos.x = x; + c->pos.y = y; + + switch (mode) { + case CM_ERASE: + c->on = 0; + aty_set_cursor(fb); + break; + + case CM_DRAW: + case CM_MOVE: + c->on = 1; + aty_set_cursor(fb); + + if (!c->timer) { + c->timer = kmalloc(sizeof(*c->timer), GFP_KERNEL); + if (!c->timer) + return; + + c->blink_rate = DEFAULT_CURSOR_BLINK_RATE; + + init_timer(c->timer); + c->timer->expires = jiffies + (HZ / 50); + c->timer->data = (unsigned long)fb; + c->timer->function = aty_cursor_timer_handler; + add_timer(c->timer); + } + + c->vbl_cnt = c->blink_rate; + c->enable = 1; + break; + } +} + +static int +atyfb_set_font(struct display *d, int width, int height) +{ + struct fb_info_aty *fb = (struct fb_info_aty *)d->fb_info; + struct aty_cursor *c = fb->cursor; + int i, j; + + if (c) { + if (!width || !height) { + width = 8; + height = 16; + } + + c->offset = fb->total_vram - 0x1000; + c->hot.x = 0; + c->hot.y = 0; + c->size.x = width; + c->size.y = height; + + memset(c->bits, 0xff, sizeof(c->bits)); + memset(c->mask, 0, sizeof(c->mask)); + + for (i = 0, j = width; j >= 0; j -= 8, i++) { + c->mask[i][height-2] = (j >= 8) ? 0xff : (0xff << (8 - j)); + c->mask[i][height-1] = (j >= 8) ? 0xff : (0xff << (8 - j)); + } + + aty_set_cursor_color(fb, cursor_pixel_map, cursor_color_map, + cursor_color_map, cursor_color_map); + aty_set_cursor_shape(fb); + } + return 1; +} + + static void atyfb_set_par(struct atyfb_par *par, struct fb_info_aty *info) { int i, j = 0, hres; @@ -1492,17 +1749,17 @@ display->inverse = 0; accel = var->accel_flags & FB_ACCELF_TEXT; switch (par.hw.gx.cmode) { -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 case CMODE_8: display->dispsw = accel ? &fbcon_aty8 : &fbcon_cfb8; break; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 case CMODE_16: display->dispsw = accel ? &fbcon_aty16 : &fbcon_cfb16; break; #endif -#ifdef CONFIG_FBCON_CFB32 +#ifdef FBCON_HAS_CFB32 case CMODE_32: display->dispsw = accel ? &fbcon_aty32 : &fbcon_cfb32; break; @@ -1514,6 +1771,10 @@ display->scrollmode = accel ? 0 : SCROLL_YREDRAW; if (info->changevar) (*info->changevar)(con); + if (info2->cursor) { + display->dispsw->cursor = atyfb_cursor; + display->dispsw->set_font = atyfb_set_font; + } } if (con == currcon) atyfb_set_par(&par, info2); @@ -1565,9 +1826,10 @@ info); else if (fb_display[con].cmap.len) /* non default colormap? */ fb_copy_cmap(&fb_display[con].cmap, cmap, kspc ? 0 : 2); - else - fb_copy_cmap(fb_default_cmap(1<palette[j].blue = default_blu[k]; } + if (info->chip_class == CLASS_VT || info->chip_class == CLASS_GT) { + info->cursor = kmalloc(sizeof(struct aty_cursor), GFP_ATOMIC); + memset(info->cursor, 0, sizeof(*info->cursor)); + } + atyfb_set_par(&info->default_par, info); encode_var(&var, &info->default_par, info); atyfb_set_var(&var, -1, &info->fb_info); @@ -1923,6 +2190,13 @@ unsigned long addr; int i, j; u16 tmp; +#ifdef __sparc__ + extern int con_is_present(void); + + /* Do not attach when we have a serial console. */ + if (!con_is_present()) + return; +#endif for (pdev = pci_devices; pdev; pdev = pdev->next) { if (((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY) && @@ -1933,6 +2207,7 @@ printk("atyfb_init: can't alloc fb_info_aty\n"); return; } + memset(info, 0, sizeof(struct fb_info_aty)); addr = pdev->base_address[0]; if ((addr & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_IO) @@ -2010,7 +2285,7 @@ * Fix PROMs idea of MEM_CNTL settings... */ tmp = aty_ld_le32(CONFIG_CHIP_ID, info) & CFG_CHIP_TYPE; - if (tmp == MACH64_VT_ID) { + if (tmp == VT_CHIP_ID) { u32 mem = aty_ld_le32(MEM_CNTL, info); switch (mem & 0x0f) { case 3: @@ -2028,7 +2303,8 @@ default: break; } - mem &= ~(0x00f00000); + if ((aty_ld_le32(CONFIG_STAT0, info) & 7) >= SDRAM) + mem &= ~(0x00f00000); aty_st_le32(MEM_CNTL, mem, info); } @@ -2213,11 +2489,8 @@ } #ifdef CONFIG_FB_COMPAT_XPMAC - if (!console_fb_info) { + if (!console_fb_info) console_fb_info = &info->fb_info; - console_setmode_ptr = atyfb_console_setmode; - console_set_cmap_ptr = atyfb_set_cmap; - } #endif /* CONFIG_FB_COMPAT_XPMAC */ } } @@ -2336,6 +2609,12 @@ atyfb_set_par(&par, info2); /* Install new colormap */ do_install_cmap(con, info); + /* Install hw cursor */ + if (info2->cursor) { + aty_set_cursor_color(info2, cursor_pixel_map, cursor_color_map, + cursor_color_map, cursor_color_map); + aty_set_cursor_shape(info2); + } return 0; } @@ -2362,20 +2641,23 @@ u8 gen_cntl; gen_cntl = aty_ld_8(CRTC_GEN_CNTL, info2); -#ifndef __sparc__ - if (blank & VESA_VSYNC_SUSPEND) - gen_cntl |= 0x8; - if (blank & VESA_HSYNC_SUSPEND) - gen_cntl |= 0x4; - if ((blank & VESA_POWERDOWN) == VESA_POWERDOWN) - gen_cntl |= 0x40; -#endif - if (blank == VESA_NO_BLANKING) - gen_cntl &= ~(0x4c); -#ifdef __sparc__ + if (blank > 0) + switch (blank-1) { + case VESA_NO_BLANKING: + gen_cntl |= 0x40; + break; + case VESA_VSYNC_SUSPEND: + gen_cntl |= 0x8; + break; + case VESA_HSYNC_SUSPEND: + gen_cntl |= 0x4; + break; + case VESA_POWERDOWN: + gen_cntl |= 0x4c; + break; + } else - gen_cntl |= 0x40; -#endif + gen_cntl &= ~(0x4c); aty_st_8(CRTC_GEN_CNTL, gen_cntl, info2); } @@ -2433,10 +2715,10 @@ info2->aty_cmap_regs->lut = blue << scale; eieio(); if (regno < 16) { -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 fbcon_cfb16_cmap[regno] = (regno << 10) | (regno << 5) | regno; #endif -#ifdef CONFIG_FBCON_CFB32 +#ifdef FBCON_HAS_CFB32 fbcon_cfb32_cmap[regno] = (regno << 24) | (regno << 16) | (regno << 8) | regno; #endif @@ -2452,10 +2734,11 @@ if (fb_display[con].cmap.len) fb_set_cmap(&fb_display[con].cmap, &fb_display[con].var, 1, atyfb_setcolreg, info); - else - fb_set_cmap(fb_default_cmap(1<fb_info); } -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 static void fbcon_aty8_putc(struct vc_data *conp, struct display *p, int c, int yy, int xx) { @@ -2584,11 +2867,12 @@ static struct display_switch fbcon_aty8 = { fbcon_cfb8_setup, fbcon_aty_bmove, fbcon_aty_clear, fbcon_aty8_putc, - fbcon_aty8_putcs, fbcon_cfb8_revc, NULL, NULL, FONTWIDTH(8) + fbcon_aty8_putcs, fbcon_cfb8_revc, NULL, NULL, fbcon_cfb8_clear_margins, + FONTWIDTH(8) }; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 static void fbcon_aty16_putc(struct vc_data *conp, struct display *p, int c, int yy, int xx) { @@ -2605,11 +2889,11 @@ static struct display_switch fbcon_aty16 = { fbcon_cfb16_setup, fbcon_aty_bmove, fbcon_aty_clear, fbcon_aty16_putc, - fbcon_aty16_putcs, fbcon_cfb16_revc, NULL, FONTWIDTH(8) + fbcon_aty16_putcs, fbcon_cfb16_revc, NULL, NULL, NULL, FONTWIDTH(8) }; #endif -#ifdef CONFIG_FBCON_CFB32 +#ifdef FBCON_HAS_CFB32 static void fbcon_aty32_putc(struct vc_data *conp, struct display *p, int c, int yy, int xx) { @@ -2626,49 +2910,6 @@ static struct display_switch fbcon_aty32 = { fbcon_cfb32_setup, fbcon_aty_bmove, fbcon_aty_clear, fbcon_aty32_putc, - fbcon_aty32_putcs, fbcon_cfb32_revc, NULL, FONTWIDTH(8) + fbcon_aty32_putcs, fbcon_cfb32_revc, NULL, NULL, NULL, FONTWIDTH(8) }; #endif - - -#ifdef CONFIG_FB_COMPAT_XPMAC - - /* - * Backward compatibility mode for Xpmac - * - * This should move to offb.c once this driver supports arbitrary video - * modes - */ - -static int atyfb_console_setmode(struct vc_mode *mode, int doit) -{ - struct fb_var_screeninfo var; - struct atyfb_par par; - int vmode, cmode; - - if (mode->mode <= 0 || mode->mode > VMODE_MAX ) - return -EINVAL; - vmode = mode->mode; - - switch (mode->depth) { - case 24: - case 32: - cmode = CMODE_32; - break; - case 16: - cmode = CMODE_16; - break; - case 8: - case 0: /* (default) */ - cmode = CMODE_8; - break; - default: - return -EINVAL; - } - init_par(&par, vmode, cmode); - encode_var(&var, &par, (struct fb_info_aty *)console_fb_info); - var.activate = doit ? FB_ACTIVATE_NOW : FB_ACTIVATE_TEST; - return atyfb_set_var(&var, currcon, console_fb_info); -} - -#endif /* CONFIG_FB_COMPAT_XPMAC */ diff -u --recursive --new-file v2.1.110/linux/drivers/video/cgsixfb.c linux/drivers/video/cgsixfb.c --- v2.1.110/linux/drivers/video/cgsixfb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/cgsixfb.c Tue Jul 21 10:28:24 1998 @@ -1,4 +1,4 @@ -/* $Id: cgsixfb.c,v 1.2 1998/07/13 12:47:14 jj Exp $ +/* $Id: cgsixfb.c,v 1.4 1998/07/21 10:36:53 jj Exp $ * cgsixfb.c: CGsix (GX,GXplus) frame buffer driver * * Copyright (C) 1996,1998 Jakub Jelinek (jj@ultra.linux.cz) @@ -209,15 +209,15 @@ }; static struct sbus_mmap_map cg6_mmap_map[] = { - { CG6_FBC, CG6_FBC_OFFSET, PAGE_SIZE }, - { CG6_TEC, CG6_TEC_OFFSET, PAGE_SIZE }, - { CG6_BTREGS, CG6_BROOKTREE_OFFSET, PAGE_SIZE }, - { CG6_FHC, CG6_FHC_OFFSET, PAGE_SIZE }, - { CG6_THC, CG6_THC_OFFSET, PAGE_SIZE }, - { CG6_ROM, CG6_ROM_OFFSET, 0x10000 }, - { CG6_RAM, CG6_RAM_OFFSET, 0x100000 }, /* FIXME: This should really be fbsize */ - { CG6_DHC, CG6_DHC_OFFSET, 0x40000 }, - { 0, 0, 0 } + { CG6_FBC, CG6_FBC_OFFSET, PAGE_SIZE }, + { CG6_TEC, CG6_TEC_OFFSET, PAGE_SIZE }, + { CG6_BTREGS, CG6_BROOKTREE_OFFSET, PAGE_SIZE }, + { CG6_FHC, CG6_FHC_OFFSET, PAGE_SIZE }, + { CG6_THC, CG6_THC_OFFSET, PAGE_SIZE }, + { CG6_ROM, CG6_ROM_OFFSET, 0x10000 }, + { CG6_RAM, CG6_RAM_OFFSET, SBUS_MMAP_FBSIZE(1) }, + { CG6_DHC, CG6_DHC_OFFSET, 0x40000 }, + { 0, 0, 0 } }; static void cg6_setup(struct display *p) @@ -229,52 +229,67 @@ static void cg6_clear(struct vc_data *conp, struct display *p, int sy, int sx, int height, int width) { -#if 0 struct fb_info_sbusfb *fb = (struct fb_info_sbusfb *)p->fb_info; register struct cg6_fbc *fbc = fb->s.cg6.fbc; int x, y, w, h; + int i; - fbc->ppc = 0x1803; - fbc->fg = cg6_cmap[attr_bg_col_ec(conp)]; - fbc->fbc = 0x2000707f; - fbc->rop = 0x83; - fbc->pmask = 0xffffffff; - fbc->unk2 = 8; - - /* FIXME: Optimize this by allowing 8/16 fontheigh only and introduce p->fontheightlog */ - if (p->fontheight == 16) { - y = sy << 4; h = height << 4; + do { + i = fbc->s; + } while (i & 0x10000000); + fbc->fg = attr_bg_col_ec(conp); + fbc->bg = attr_bg_col_ec(conp); + fbc->pixelm = ~(0); + fbc->alu = 0xea80ff00; + fbc->s = 0; + fbc->clip = 0; + fbc->pm = ~(0); + + if (p->fontheightlog) { + y = sy << p->fontheightlog; h = height << p->fontheightlog; } else { y = sy * p->fontheight; h = height * p->fontheight; } - x = sx << 3; w = width << 3; - fbc->by = y + fb->y_margin; - fbc->bx = x + fb->x_margin; - fbc->bh = h; - fbc->bw = w; -#endif + if (p->fontwidthlog) { + x = sx << p->fontwidthlog; w = width << p->fontwidthlog; + } else { + x = sx * p->fontwidth; w = width * p->fontwidth; + } + fbc->arecty = y + fb->y_margin; + fbc->arectx = x + fb->x_margin; + fbc->arecty = y + fb->y_margin + h; + fbc->arectx = x + fb->x_margin + w; + do { + i = fbc->draw; + } while (i < 0 && (i & 0x20000000)); } static void cg6_fill(struct fb_info_sbusfb *fb, int s, int count, unsigned short *boxes) { -#if 0 + int i; register struct cg6_fbc *fbc = fb->s.cg6.fbc; - - fbc->ppc = 0x1803; - fbc->fg = cg6_cmap[attr_bg_col(s)]; - fbc->fbc = 0x2000707f; - fbc->rop = 0x83; - fbc->pmask = 0xffffffff; - fbc->unk2 = 8; + + do { + i = fbc->s; + } while (i & 0x10000000); + fbc->fg = attr_bg_col(s); + fbc->bg = attr_bg_col(s); + fbc->pixelm = ~(0); + fbc->alu = 0xea80ff00; + fbc->s = 0; + fbc->clip = 0; + fbc->pm = ~(0); while (count-- > 0) { - fbc->by = boxes[1]; - fbc->bx = boxes[0]; - fbc->bh = boxes[3] - boxes[1]; - fbc->bw = boxes[2] - boxes[0]; + fbc->arecty = boxes[1]; + fbc->arectx = boxes[0]; + fbc->arecty = boxes[3]; + fbc->arectx = boxes[2]; boxes += 4; + do { + i = fbc->draw; + } while (i < 0 && (i & 0x20000000)); } -#endif } static void cg6_putc(struct vc_data *conp, struct display *p, int c, int yy, int xx) @@ -448,9 +463,20 @@ } } +static void cg6_restore_palette (struct fb_info_sbusfb *fb) +{ + struct bt_regs *bt = fb->s.cg6.bt; + int i; + + bt->addr = 0; + bt->color_map = 0xffffffff; + bt->color_map = 0xffffffff; + bt->color_map = 0xffffffff; +} + static struct display_switch cg6_dispsw __initdata = { cg6_setup, fbcon_redraw_bmove, cg6_clear, cg6_putc, cg6_putcs, cg6_revc, - NULL, NULL, FONTWIDTHRANGE(1,16) /* Allow fontwidths up to 16 */ + NULL, NULL, NULL, FONTWIDTHRANGE(1,16) /* Allow fontwidths up to 16 */ }; static void cg6_setcursormap (struct fb_info_sbusfb *fb, u8 *red, u8 *green, u8 *blue) @@ -473,7 +499,7 @@ struct cg6_thc *thc = fb->s.cg6.thc; int i; - for (i = 0; i < 32; i++){ + for (i = 0; i < 32; i++) { thc->thc_cursmask [i] = fb->cursor.bits[0][i]; thc->thc_cursbits [i] = fb->cursor.bits[1][i]; } @@ -570,6 +596,7 @@ fix->line_length = fb->var.xres_virtual; fix->mmio_start = (char *)phys + CG6_FBC_OFFSET; fix->mmio_len = PAGE_SIZE; + fix->accel = FB_ACCEL_SUN_CGSIX; var->accel_flags = FB_ACCELF_TEXT; @@ -595,6 +622,7 @@ fb->setcursor = cg6_setcursor; fb->setcursormap = cg6_setcursormap; fb->setcurshape = cg6_setcurshape; + fb->restore_palette = cg6_restore_palette; fb->fill = cg6_fill; fb->blank = cg6_blank; fb->unblank = cg6_unblank; diff -u --recursive --new-file v2.1.110/linux/drivers/video/chipsfb.c linux/drivers/video/chipsfb.c --- v2.1.110/linux/drivers/video/chipsfb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/chipsfb.c Tue Jul 21 10:28:24 1998 @@ -41,6 +41,7 @@ #include "fbcon.h" #include "fbcon-cfb8.h" #include "fbcon-cfb16.h" +#include "macmodes.h" static int currcon = 0; @@ -300,7 +301,7 @@ out_8(p->io_base + 0x3c9, green); out_8(p->io_base + 0x3c9, blue); -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 if (regno < 16) fbcon_cfb16_cmap[regno] = (red << 10) | (green << 5) | blue; #endif @@ -347,7 +348,11 @@ var->blue.offset = 0; var->red.length = var->green.length = var->blue.length = 5; +#ifdef FBCON_HAS_CFB16 disp->dispsw = &fbcon_cfb16; +#else + disp->dispsw = NULL; +#endif } else if (bpp == 8) { if (con == currcon) { write_cr(0x13, 100); // 8 bit display width (decimal) @@ -362,7 +367,11 @@ var->red.offset = var->green.offset = var->blue.offset = 0; var->red.length = var->green.length = var->blue.length = 8; +#ifdef FBCON_HAS_CFB8 disp->dispsw = &fbcon_cfb8; +#else + disp->dispsw = NULL; +#endif } var->bits_per_pixel = bpp; diff -u --recursive --new-file v2.1.110/linux/drivers/video/creatorfb.c linux/drivers/video/creatorfb.c --- v2.1.110/linux/drivers/video/creatorfb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/creatorfb.c Tue Jul 21 10:28:24 1998 @@ -1,4 +1,4 @@ -/* $Id: creatorfb.c,v 1.5 1998/07/13 12:47:12 jj Exp $ +/* $Id: creatorfb.c,v 1.7 1998/07/21 10:36:48 jj Exp $ * creatorfb.c: Creator/Creator3D frame buffer driver * * Copyright (C) 1997,1998 Jakub Jelinek (jj@ultra.linux.cz) @@ -191,7 +191,6 @@ fbc->pmask = 0xffffffff; fbc->unk2 = 8; - /* FIXME: Optimize this by allowing 8/16 fontheigh only and introduce p->fontheightlog */ if (p->fontheightlog) { y = sy << p->fontheightlog; h = height << p->fontheightlog; } else { @@ -390,7 +389,7 @@ static struct display_switch ffb_dispsw __initdata = { ffb_setup, fbcon_redraw_bmove, ffb_clear, ffb_putc, ffb_putcs, ffb_revc, - NULL, NULL, FONTWIDTHRANGE(1,16) /* Allow fontwidths up to 16 */ + NULL, NULL, NULL, FONTWIDTHRANGE(1,16) /* Allow fontwidths up to 16 */ }; static void ffb_margins (struct fb_info_sbusfb *fb, struct display *p, int x_margin, int y_margin) @@ -477,6 +476,7 @@ fix->line_length = 8192; fix->mmio_start = (char *)(regs[0].phys_addr) + FFB_FBC_REGS_POFF; fix->mmio_len = PAGE_SIZE; + fix->accel = FB_ACCEL_SUN_CREATOR; var->bits_per_pixel = 32; var->green.offset = 8; diff -u --recursive --new-file v2.1.110/linux/drivers/video/cyberfb.c linux/drivers/video/cyberfb.c --- v2.1.110/linux/drivers/video/cyberfb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/cyberfb.c Tue Jul 21 10:28:24 1998 @@ -241,7 +241,7 @@ * Text console acceleration */ -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 static struct display_switch fbcon_cyber8; #endif @@ -853,7 +853,7 @@ display->can_soft_blank = 1; display->inverse = Cyberfb_inverse; switch (display->var.bits_per_pixel) { -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 case 8: if (display->var.accel_flags & FB_ACCELF_TEXT) { display->dispsw = &fbcon_cyber8; @@ -862,7 +862,7 @@ display->dispsw = &fbcon_cfb8; break; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 case 16: display->dispsw = &fbcon_cfb16; break; @@ -1127,7 +1127,7 @@ * Text console acceleration */ -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 static void fbcon_cyber8_bmove(struct display *p, int sy, int sx, int dy, int dx, int height, int width) { @@ -1174,7 +1174,8 @@ static struct display_switch fbcon_cyber8 = { fbcon_cfb8_setup, fbcon_cyber8_bmove, fbcon_cyber8_clear, fbcon_cyber8_putc, - fbcon_cyber8_putcs, fbcon_cyber8_revc, NULL, NULL, FONTWIDTH(8) + fbcon_cyber8_putcs, fbcon_cyber8_revc, NULL, NULL, fbcon_cfb8_clear_margins, + FONTWIDTH(8) }; #endif diff -u --recursive --new-file v2.1.110/linux/drivers/video/dnfb.c linux/drivers/video/dnfb.c --- v2.1.110/linux/drivers/video/dnfb.c Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/dnfb.c Tue Jul 21 10:28:24 1998 @@ -304,7 +304,7 @@ disp[con].can_soft_blank = 1; disp[con].inverse = 0; disp[con].line_length = fix.line_length; -#ifdef CONFIG_FBCON_MFB +#ifdef FBCON_HAS_MFB disp[con].dispsw = &fbcon_mfb; #else disp[con].dispsw = NULL; diff -u --recursive --new-file v2.1.110/linux/drivers/video/dummycon.c linux/drivers/video/dummycon.c --- v2.1.110/linux/drivers/video/dummycon.c Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/dummycon.c Tue Jul 21 10:28:24 1998 @@ -15,13 +15,15 @@ /* * Dummy console driver - * */ #ifdef __sparc__ /* Some reasonable defaults, so that we don't loose any text */ #define DUMMY_COLUMNS 128 #define DUMMY_ROWS 54 +#elif defined(CONFIG_ARM) +#define DUMMY_COLUMNS ORIG_VIDEO_COLS +#define DUMMY_ROWS ORIG_VIDEO_LINES #else #define DUMMY_COLUMNS 80 #define DUMMY_ROWS 25 @@ -64,8 +66,7 @@ (void *)dummycon_dummy, /* con_bmove */ (void *)dummycon_dummy, /* con_switch */ (void *)dummycon_dummy, /* con_blank */ - (void *)dummycon_dummy, /* con_get_font */ - (void *)dummycon_dummy, /* con_set_font */ + (void *)dummycon_dummy, /* con_font_op */ (void *)dummycon_dummy, /* con_set_palette */ (void *)dummycon_dummy, /* con_scrolldelta */ NULL, /* con_set_origin */ diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcmap.c linux/drivers/video/fbcmap.c --- v2.1.110/linux/drivers/video/fbcmap.c Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcmap.c Tue Jul 21 10:28:24 1998 @@ -59,7 +59,7 @@ 0x0000, 0x0000, 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa }; static u16 green8[] = { - 0x0000, 0x0000, 0xaaaa, 0x5555, 0x0000, 0x0000, 0xaaaa, 0xaaaa + 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x5555, 0xaaaa }; static u16 blue8[] = { 0x0000, 0xaaaa, 0x0000, 0xaaaa, 0x0000, 0xaaaa, 0x0000, 0xaaaa @@ -70,7 +70,7 @@ 0x5555, 0x5555, 0x5555, 0x5555, 0xffff, 0xffff, 0xffff, 0xffff }; static u16 green16[] = { - 0x0000, 0x0000, 0xaaaa, 0x5555, 0x0000, 0x0000, 0xaaaa, 0xaaaa, + 0x0000, 0x0000, 0xaaaa, 0xaaaa, 0x0000, 0x0000, 0x5555, 0xaaaa, 0x5555, 0x5555, 0xffff, 0xffff, 0x5555, 0x5555, 0xffff, 0xffff }; static u16 blue16[] = { diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-afb.c linux/drivers/video/fbcon-afb.c --- v2.1.110/linux/drivers/video/fbcon-afb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-afb.c Tue Jul 21 10:28:24 1998 @@ -412,7 +412,7 @@ struct display_switch fbcon_afb = { fbcon_afb_setup, fbcon_afb_bmove, fbcon_afb_clear, fbcon_afb_putc, - fbcon_afb_putcs, fbcon_afb_revc, NULL, NULL, FONTWIDTH(8) + fbcon_afb_putcs, fbcon_afb_revc, NULL, NULL, NULL, FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-afb.h linux/drivers/video/fbcon-afb.h --- v2.1.110/linux/drivers/video/fbcon-afb.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-afb.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * Amiga bitplanes (afb) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_AFB) || defined(CONFIG_FBCON_AFB_MODULE) +#define FBCON_HAS_AFB +#endif +#else +#if defined(CONFIG_FBCON_AFB) +#define FBCON_HAS_AFB +#endif +#endif + extern struct display_switch fbcon_afb; extern void fbcon_afb_setup(struct display *p); extern void fbcon_afb_bmove(struct display *p, int sy, int sx, int dy, int dx, diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-cfb16.c linux/drivers/video/fbcon-cfb16.c --- v2.1.110/linux/drivers/video/fbcon-cfb16.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-cfb16.c Tue Jul 21 10:28:24 1998 @@ -179,7 +179,7 @@ struct display_switch fbcon_cfb16 = { fbcon_cfb16_setup, fbcon_cfb16_bmove, fbcon_cfb16_clear, fbcon_cfb16_putc, - fbcon_cfb16_putcs, fbcon_cfb16_revc, NULL, NULL, FONTWIDTH(8) + fbcon_cfb16_putcs, fbcon_cfb16_revc, NULL, NULL, NULL, FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-cfb16.h linux/drivers/video/fbcon-cfb16.h --- v2.1.110/linux/drivers/video/fbcon-cfb16.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-cfb16.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * 16 bpp packed pixel (cfb16) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_CFB16) || defined(CONFIG_FBCON_CFB16_MODULE) +#define FBCON_HAS_CFB16 +#endif +#else +#if defined(CONFIG_FBCON_CFB16) +#define FBCON_HAS_CFB16 +#endif +#endif + extern struct display_switch fbcon_cfb16; extern u16 fbcon_cfb16_cmap[16]; extern void fbcon_cfb16_setup(struct display *p); diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-cfb2.c linux/drivers/video/fbcon-cfb2.c --- v2.1.110/linux/drivers/video/fbcon-cfb2.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-cfb2.c Tue Jul 21 10:28:24 1998 @@ -32,10 +32,19 @@ */ static u_char nibbletab_cfb2[]={ +#if defined(__BIG_ENDIAN) 0x00,0x03,0x0c,0x0f, 0x30,0x33,0x3c,0x3f, 0xc0,0xc3,0xcc,0xcf, 0xf0,0xf3,0xfc,0xff +#elif defined(__LITTLE_ENDIAN) + 0x00,0xc0,0x30,0xf0, + 0x0c,0xcc,0x3c,0xfc, + 0x03,0xc3,0x33,0xf3, + 0x0f,0xcf,0x3f,0xff +#else +#error FIXME: No endianness?? +#endif }; @@ -185,7 +194,7 @@ struct display_switch fbcon_cfb2 = { fbcon_cfb2_setup, fbcon_cfb2_bmove, fbcon_cfb2_clear, fbcon_cfb2_putc, - fbcon_cfb2_putcs, fbcon_cfb2_revc, NULL, NULL, FONTWIDTH(8) + fbcon_cfb2_putcs, fbcon_cfb2_revc, NULL, NULL, NULL, FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-cfb2.h linux/drivers/video/fbcon-cfb2.h --- v2.1.110/linux/drivers/video/fbcon-cfb2.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-cfb2.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * 2 bpp packed pixel (cfb2) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_CFB2) || defined(CONFIG_FBCON_CFB2_MODULE) +#define FBCON_HAS_CFB2 +#endif +#else +#if defined(CONFIG_FBCON_CFB2) +#define FBCON_HAS_CFB2 +#endif +#endif + extern struct display_switch fbcon_cfb2; extern void fbcon_cfb2_setup(struct display *p); extern void fbcon_cfb2_bmove(struct display *p, int sy, int sx, int dy, int dx, diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-cfb24.c linux/drivers/video/fbcon-cfb24.c --- v2.1.110/linux/drivers/video/fbcon-cfb24.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-cfb24.c Tue Jul 21 10:28:24 1998 @@ -199,7 +199,7 @@ struct display_switch fbcon_cfb24 = { fbcon_cfb24_setup, fbcon_cfb24_bmove, fbcon_cfb24_clear, fbcon_cfb24_putc, - fbcon_cfb24_putcs, fbcon_cfb24_revc, NULL, NULL, FONTWIDTH(8) + fbcon_cfb24_putcs, fbcon_cfb24_revc, NULL, NULL, NULL, FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-cfb24.h linux/drivers/video/fbcon-cfb24.h --- v2.1.110/linux/drivers/video/fbcon-cfb24.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-cfb24.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * 24 bpp packed pixel (cfb24) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_CFB24) || defined(CONFIG_FBCON_CFB24_MODULE) +#define FBCON_HAS_CFB24 +#endif +#else +#if defined(CONFIG_FBCON_CFB24) +#define FBCON_HAS_CFB24 +#endif +#endif + extern struct display_switch fbcon_cfb24; extern u32 fbcon_cfb24_cmap[16]; extern void fbcon_cfb24_setup(struct display *p); diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-cfb32.c linux/drivers/video/fbcon-cfb32.c --- v2.1.110/linux/drivers/video/fbcon-cfb32.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-cfb32.c Tue Jul 21 10:28:24 1998 @@ -184,7 +184,7 @@ struct display_switch fbcon_cfb32 = { fbcon_cfb32_setup, fbcon_cfb32_bmove, fbcon_cfb32_clear, fbcon_cfb32_putc, - fbcon_cfb32_putcs, fbcon_cfb32_revc, NULL, NULL, FONTWIDTH(8) + fbcon_cfb32_putcs, fbcon_cfb32_revc, NULL, NULL, NULL, FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-cfb32.h linux/drivers/video/fbcon-cfb32.h --- v2.1.110/linux/drivers/video/fbcon-cfb32.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-cfb32.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * 32 bpp packed pixel (cfb32) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_CFB32) || defined(CONFIG_FBCON_CFB32_MODULE) +#define FBCON_HAS_CFB32 +#endif +#else +#if defined(CONFIG_FBCON_CFB32) +#define FBCON_HAS_CFB32 +#endif +#endif + extern struct display_switch fbcon_cfb32; extern u32 fbcon_cfb32_cmap[16]; extern void fbcon_cfb32_setup(struct display *p); diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-cfb4.c linux/drivers/video/fbcon-cfb4.c --- v2.1.110/linux/drivers/video/fbcon-cfb4.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-cfb4.c Tue Jul 21 11:39:16 1998 @@ -32,10 +32,20 @@ */ static u16 nibbletab_cfb4[] = { +#if defined(__BIG_ENDIAN) 0x0000,0x000f,0x00f0,0x00ff, 0x0f00,0x0f0f,0x0ff0,0x0fff, 0xf000,0xf00f,0xf0f0,0xf0ff, 0xff00,0xff0f,0xfff0,0xffff +#elif defined(__LITTLE_ENDIAN) + 0x0000,0xf000,0x0f00,0xff00, + 0x00f0,0xf0f0,0x0ff0,0xfff0, + 0x000f,0xf00f,0x0f0f,0xff0f, + 0x00ff,0xf0ff,0x0fff,0xffff +#else +#error FIXME: No endianness?? +#endif + }; void fbcon_cfb4_setup(struct display *p) @@ -188,7 +198,7 @@ struct display_switch fbcon_cfb4 = { fbcon_cfb4_setup, fbcon_cfb4_bmove, fbcon_cfb4_clear, fbcon_cfb4_putc, - fbcon_cfb4_putcs, fbcon_cfb4_revc, NULL, NULL, FONTWIDTH(8) + fbcon_cfb4_putcs, fbcon_cfb4_revc, NULL, NULL, NULL, FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-cfb4.h linux/drivers/video/fbcon-cfb4.h --- v2.1.110/linux/drivers/video/fbcon-cfb4.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-cfb4.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * 4 bpp packed pixel (cfb4) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_CFB4) || defined(CONFIG_FBCON_CFB4_MODULE) +#define FBCON_HAS_CFB4 +#endif +#else +#if defined(CONFIG_FBCON_CFB4) +#define FBCON_HAS_CFB4 +#endif +#endif + extern struct display_switch fbcon_cfb4; extern void fbcon_cfb4_setup(struct display *p); extern void fbcon_cfb4_bmove(struct display *p, int sy, int sx, int dy, int dx, diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-cfb8.c linux/drivers/video/fbcon-cfb8.c --- v2.1.110/linux/drivers/video/fbcon-cfb8.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-cfb8.c Tue Jul 21 10:28:24 1998 @@ -108,7 +108,7 @@ int bytes=p->next_line,rows; u32 eorx,fgx,bgx; - dest = p->screen_base + yy * p->fontheight * bytes + xx * 8; + dest = p->screen_base + yy * p->fontheight * bytes + xx * p->fontwidth; if (p->fontwidth <= 8) cdat = p->fontdata + (c & 0xff) * p->fontheight; else @@ -154,7 +154,7 @@ int rows,bytes=p->next_line; u32 eorx, fgx, bgx; - dest0 = p->screen_base + yy * p->fontheight * bytes + xx * 8; + dest0 = p->screen_base + yy * p->fontheight * bytes + xx * p->fontwidth; fgx=attr_fgcol(p,*s); bgx=attr_bgcol(p,*s); fgx |= (fgx << 8); @@ -222,6 +222,29 @@ } } +void fbcon_cfb8_clear_margins(struct vc_data *conp, struct display *p) +{ + u8 *dest; + int bytes=p->next_line; + u8 bgx; + int i; + + unsigned int right_start = conp->vc_cols*p->fontwidth; + unsigned int right_width = p->var.xres_virtual-right_start; + unsigned int bottom_start = conp->vc_rows*p->fontheight; + unsigned int bottom_width = p->var.yres_virtual-bottom_start; + + bgx=attr_bgcol_ec(p,conp); + + if (right_width) { + dest = p->screen_base+right_start; + for (i = 0; i < bottom_start; i++, dest += bytes) + memset(dest, bgx, right_width); + } + if (bottom_width) + memset(p->screen_base+bottom_start*bytes, bgx, bytes*bottom_width); +} + /* * `switch' for the low level operations @@ -229,7 +252,7 @@ struct display_switch fbcon_cfb8 = { fbcon_cfb8_setup, fbcon_cfb8_bmove, fbcon_cfb8_clear, fbcon_cfb8_putc, - fbcon_cfb8_putcs, fbcon_cfb8_revc, NULL, NULL, + fbcon_cfb8_putcs, fbcon_cfb8_revc, NULL, NULL, fbcon_cfb8_clear_margins, FONTWIDTH(4)|FONTWIDTH(8)|FONTWIDTH(12)|FONTWIDTH(16) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-cfb8.h linux/drivers/video/fbcon-cfb8.h --- v2.1.110/linux/drivers/video/fbcon-cfb8.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-cfb8.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * 8 bpp packed pixel (cfb8) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_CFB8) || defined(CONFIG_FBCON_CFB8_MODULE) +#define FBCON_HAS_CFB8 +#endif +#else +#if defined(CONFIG_FBCON_CFB8) +#define FBCON_HAS_CFB8 +#endif +#endif + extern struct display_switch fbcon_cfb8; extern void fbcon_cfb8_setup(struct display *p); extern void fbcon_cfb8_bmove(struct display *p, int sy, int sx, int dy, int dx, @@ -13,3 +23,4 @@ extern void fbcon_cfb8_putcs(struct vc_data *conp, struct display *p, const unsigned short *s, int count, int yy, int xx); extern void fbcon_cfb8_revc(struct display *p, int xx, int yy); +extern void fbcon_cfb8_clear_margins(struct vc_data *conp, struct display *p); diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-ilbm.c linux/drivers/video/fbcon-ilbm.c --- v2.1.110/linux/drivers/video/fbcon-ilbm.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-ilbm.c Tue Jul 21 10:28:24 1998 @@ -260,7 +260,7 @@ struct display_switch fbcon_ilbm = { fbcon_ilbm_setup, fbcon_ilbm_bmove, fbcon_ilbm_clear, fbcon_ilbm_putc, - fbcon_ilbm_putcs, fbcon_ilbm_revc, NULL, NULL, FONTWIDTH(8) + fbcon_ilbm_putcs, fbcon_ilbm_revc, NULL, NULL, NULL, FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-ilbm.h linux/drivers/video/fbcon-ilbm.h --- v2.1.110/linux/drivers/video/fbcon-ilbm.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-ilbm.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * Amiga interleaved bitplanes (ilbm) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_ILBM) || defined(CONFIG_FBCON_ILBM_MODULE) +#define FBCON_HAS_ILBM +#endif +#else +#if defined(CONFIG_FBCON_ILBM) +#define FBCON_HAS_ILBM +#endif +#endif + extern struct display_switch fbcon_ilbm; extern void fbcon_ilbm_setup(struct display *p); extern void fbcon_ilbm_bmove(struct display *p, int sy, int sx, int dy, int dx, diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-iplan2p2.c linux/drivers/video/fbcon-iplan2p2.c --- v2.1.110/linux/drivers/video/fbcon-iplan2p2.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-iplan2p2.c Tue Jul 21 10:28:24 1998 @@ -375,7 +375,7 @@ struct display_switch fbcon_iplan2p2 = { fbcon_iplan2p2_setup, fbcon_iplan2p2_bmove, fbcon_iplan2p2_clear, fbcon_iplan2p2_putc, fbcon_iplan2p2_putcs, fbcon_iplan2p2_revc, NULL, - NULL, FONTWIDTH(8) + NULL, NULL, FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-iplan2p2.h linux/drivers/video/fbcon-iplan2p2.h --- v2.1.110/linux/drivers/video/fbcon-iplan2p2.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-iplan2p2.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * Atari interleaved bitplanes (2 planes) (iplan2p2) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_IPLAN2P2) || defined(CONFIG_FBCON_IPLAN2P2_MODULE) +#define FBCON_HAS_IPLAN2P2 +#endif +#else +#if defined(CONFIG_FBCON_IPLAN2P2) +#define FBCON_HAS_IPLAN2P2 +#endif +#endif + extern struct display_switch fbcon_iplan2p2; extern void fbcon_iplan2p2_setup(struct display *p); extern void fbcon_iplan2p2_bmove(struct display *p, int sy, int sx, int dy, diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-iplan2p4.c linux/drivers/video/fbcon-iplan2p4.c --- v2.1.110/linux/drivers/video/fbcon-iplan2p4.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-iplan2p4.c Tue Jul 21 10:28:24 1998 @@ -395,7 +395,7 @@ struct display_switch fbcon_iplan2p4 = { fbcon_iplan2p4_setup, fbcon_iplan2p4_bmove, fbcon_iplan2p4_clear, fbcon_iplan2p4_putc, fbcon_iplan2p4_putcs, fbcon_iplan2p4_revc, NULL, - NULL, FONTWIDTH(8) + NULL, NULL, FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-iplan2p4.h linux/drivers/video/fbcon-iplan2p4.h --- v2.1.110/linux/drivers/video/fbcon-iplan2p4.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-iplan2p4.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * Atari interleaved bitplanes (4 planes) (iplan2p4) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_IPLAN2P4) || defined(CONFIG_FBCON_IPLAN2P4_MODULE) +#define FBCON_HAS_IPLAN2P4 +#endif +#else +#if defined(CONFIG_FBCON_IPLAN2P4) +#define FBCON_HAS_IPLAN2P4 +#endif +#endif + extern struct display_switch fbcon_iplan2p4; extern void fbcon_iplan2p4_setup(struct display *p); extern void fbcon_iplan2p4_bmove(struct display *p, int sy, int sx, int dy, diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-iplan2p8.c linux/drivers/video/fbcon-iplan2p8.c --- v2.1.110/linux/drivers/video/fbcon-iplan2p8.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-iplan2p8.c Tue Jul 21 10:28:24 1998 @@ -432,7 +432,7 @@ struct display_switch fbcon_iplan2p8 = { fbcon_iplan2p8_setup, fbcon_iplan2p8_bmove, fbcon_iplan2p8_clear, fbcon_iplan2p8_putc, fbcon_iplan2p8_putcs, fbcon_iplan2p8_revc, NULL, - NULL, FONTWIDTH(8) + NULL, NULL, FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-iplan2p8.h linux/drivers/video/fbcon-iplan2p8.h --- v2.1.110/linux/drivers/video/fbcon-iplan2p8.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-iplan2p8.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * Atari interleaved bitplanes (8 planes) (iplan2p8) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_IPLAN2P8) || defined(CONFIG_FBCON_IPLAN2P8_MODULE) +#define FBCON_HAS_IPLAN2P8 +#endif +#else +#if defined(CONFIG_FBCON_IPLAN2P8) +#define FBCON_HAS_IPLAN2P8 +#endif +#endif + extern struct display_switch fbcon_iplan2p8; extern void fbcon_iplan2p8_setup(struct display *p); extern void fbcon_iplan2p8_bmove(struct display *p, int sy, int sx, int dy, diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-mac.c linux/drivers/video/fbcon-mac.c --- v2.1.110/linux/drivers/video/fbcon-mac.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-mac.c Tue Jul 21 10:28:24 1998 @@ -497,7 +497,7 @@ struct display_switch fbcon_mac = { fbcon_mac_setup, fbcon_mac_bmove, fbcon_mac_clear, fbcon_mac_putc, - fbcon_mac_putcs, fbcon_mac_revc, NULL, NULL, FONTWIDTHRANGE(1,8) + fbcon_mac_putcs, fbcon_mac_revc, NULL, NULL, NULL, FONTWIDTHRANGE(1,8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-mac.h linux/drivers/video/fbcon-mac.h --- v2.1.110/linux/drivers/video/fbcon-mac.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-mac.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * Mac variable bpp packed pixels (mac) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_MAC) || defined(CONFIG_FBCON_MAC_MODULE) +#define FBCON_HAS_MAC +#endif +#else +#if defined(CONFIG_FBCON_MAC) +#define FBCON_HAS_MAC +#endif +#endif + extern struct display_switch fbcon_mac; extern void fbcon_mac_setup(struct display *p); extern void fbcon_mac_bmove(struct display *p, int sy, int sx, int dy, int dx, diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-mfb.c linux/drivers/video/fbcon-mfb.c --- v2.1.110/linux/drivers/video/fbcon-mfb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-mfb.c Tue Jul 21 10:28:24 1998 @@ -153,7 +153,7 @@ struct display_switch fbcon_mfb = { fbcon_mfb_setup, fbcon_mfb_bmove, fbcon_mfb_clear, fbcon_mfb_putc, - fbcon_mfb_putcs, fbcon_mfb_revc, NULL, NULL, FONTWIDTH(8) + fbcon_mfb_putcs, fbcon_mfb_revc, NULL, NULL, NULL, FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-mfb.h linux/drivers/video/fbcon-mfb.h --- v2.1.110/linux/drivers/video/fbcon-mfb.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-mfb.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * Monochrome (mfb) */ +#ifdef MODULE +#if defined(CONFIG_FBCON_MFB) || defined(CONFIG_FBCON_MFB_MODULE) +#define FBCON_HAS_MFB +#endif +#else +#if defined(CONFIG_FBCON_MFB) +#define FBCON_HAS_MFB +#endif +#endif + extern struct display_switch fbcon_mfb; extern void fbcon_mfb_setup(struct display *p); extern void fbcon_mfb_bmove(struct display *p, int sy, int sx, int dy, int dx, diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-vga.c linux/drivers/video/fbcon-vga.c --- v2.1.110/linux/drivers/video/fbcon-vga.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon-vga.c Tue Jul 21 10:28:24 1998 @@ -178,7 +178,7 @@ struct display_switch fbcon_vga = { fbcon_vga_setup, fbcon_vga_bmove, fbcon_vga_clear, fbcon_vga_putc, - fbcon_vga_putcs, fbcon_vga_revc, NULL, NULL, FONTWIDTH(8) + fbcon_vga_putcs, fbcon_vga_revc, NULL, NULL, NULL, FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon-vga.h linux/drivers/video/fbcon-vga.h --- v2.1.110/linux/drivers/video/fbcon-vga.h Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/fbcon-vga.h Tue Jul 21 10:28:24 1998 @@ -2,6 +2,16 @@ * VGA characters/attributes */ +#ifdef MODULE +#if defined(CONFIG_FBCON_VGA) || defined(CONFIG_FBCON_VGA_MODULE) +#define FBCON_HAS_VGA +#endif +#else +#if defined(CONFIG_FBCON_VGA) +#define FBCON_HAS_VGA +#endif +#endif + extern struct display_switch fbcon_vga; extern void fbcon_vga_setup(struct display *p); extern void fbcon_vga_bmove(struct display *p, int sy, int sx, int dy, int dx, diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon.c linux/drivers/video/fbcon.c --- v2.1.110/linux/drivers/video/fbcon.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon.c Tue Jul 21 10:28:24 1998 @@ -167,8 +167,7 @@ int height, int width); static int fbcon_switch(struct vc_data *conp); static int fbcon_blank(struct vc_data *conp, int blank); -static int fbcon_get_font(struct vc_data *conp, int *w, int *h, char *data); -static int fbcon_set_font(struct vc_data *conp, int w, int h, char *data); +static int fbcon_font_op(struct vc_data *conp, struct console_font_op *op); static int fbcon_set_palette(struct vc_data *conp, unsigned char *table); static int fbcon_scrolldelta(struct vc_data *conp, int lines); @@ -303,7 +302,7 @@ #endif /* CONFIG_MAC */ #if defined(__arm__) && defined(IRQ_VSYNCPULSE) - irqres = request_irq(IRQ_VSYNCPULSE, fbcon_vbl_handler, 0, + irqres = request_irq(IRQ_VSYNCPULSE, fbcon_vbl_handler, SA_SHIRQ, "console/cursor", fbcon_vbl_handler); #endif @@ -400,6 +399,7 @@ int logo_lines = 0; /* Only if not module */ extern int initmem_freed; + struct fbcon_font_desc *font; if (con != fg_console || initmem_freed || p->type == FB_TYPE_TEXT) logo = 0; @@ -407,11 +407,11 @@ p->var.xoffset = p->var.yoffset = p->yscroll = 0; /* reset wrap/pan */ if (!p->fb_info->fontname[0] || - !findsoftfont(p->fb_info->fontname, &p->fontwidth, &p->fontheight, - &p->fontdata) || !fontwidthvalid(p,p->fontwidth)) - getdefaultfont(p->var.xres, p->var.yres, NULL, &p->fontwidth, - &p->fontheight, &p->fontdata); - + !(font = fbcon_find_font(p->fb_info->fontname))) + font = fbcon_get_default_font(p->var.xres, p->var.yres); + p->fontwidth = font->width; + p->fontheight = font->height; + p->fontdata = font->data; fbcon_font_widths(p); if (!fontwidthvalid(p,p->fontwidth)) { #ifdef CONFIG_MAC @@ -497,6 +497,9 @@ p->bgcol = 0; if (!init) { + if (con == fg_console) + set_palette(); /* Unlike vgacon, we have to set palette before resize on directcolor, + so that it is drawn with correct colors */ vc_resize_con(nr_rows, nr_cols, con); if (save) { q = (unsigned short *)(conp->vc_origin + conp->vc_size_row * old_rows); @@ -1103,6 +1106,8 @@ if (info && info->switch_con) (*info->switch_con)(conp->vc_num, info); + if (p->dispsw && p->dispsw->clear_margins) + p->dispsw->clear_margins(conp, p); return 1; } @@ -1145,21 +1150,17 @@ } -static int fbcon_get_font(struct vc_data *conp, int *w, int *h, char *data) +static inline int fbcon_get_font(int unit, struct console_font_op *op) { - int unit = conp->vc_num; struct display *p = &fb_display[unit]; - int i, j, size, alloc; - - size = (p->fontwidth+7)/8 * p->fontheight * 256; - alloc = (*w+7)/8 * *h * 256; - *w = p->fontwidth; - *h = p->fontheight; - - if (alloc < size) - /* allocation length not sufficient */ - return -ENAMETOOLONG; + char *data = op->data; + int i, j; + if (p->fontwidth != 8) /* FIXME: Implement for wide fonts */ + return -EINVAL; + op->width = p->fontwidth; + op->height = p->fontheight; + op->charcount = 256; for (i = 0; i < 256; i++) for (j = 0; j < p->fontheight; j++) data[i*32+j] = p->fontdata[i*p->fontheight+j]; @@ -1170,85 +1171,30 @@ #define REFCOUNT(fd) (((int *)(fd))[-1]) #define FNTSIZE(fd) (((int *)(fd))[-2]) -static int fbcon_set_font(struct vc_data *conp, int w, int h, char *data) +static int fbcon_do_set_font(int unit, struct console_font_op *op, u8 *data, int userfont) { - int unit = conp->vc_num; struct display *p = &fb_display[unit]; - int i, j, size, userspace = 1, resize; - char *old_data = NULL, *new_data; - - if (w < 0) - w = p->fontwidth; - if (h < 0) - h = p->fontheight; - - if (w == 0) { - /* engage predefined font, name in 'data' */ - unsigned short width, height; - data[MAX_FONT_NAME] = 0; - - if (!findsoftfont( data, &width, &height, (u8 **)&data )) - return -ENOENT; - w = width; h = height; - userspace = 0; - } else if (w == 1) { - /* copy font from some other console in 'h'*/ - struct display *op; - - if (h < 0 || !vc_cons_allocated( h )) - return -ENOTTY; - if (h == unit) - return 0; /* nothing to do */ - op = &fb_display[h]; - if (op->fontdata == p->fontdata) - return 0; /* already the same font... */ - - resize = (op->fontwidth != p->fontwidth) || - (op->fontheight != p->fontheight); - if (p->userfont) - old_data = p->fontdata; - p->fontdata = op->fontdata; - w = p->fontwidth = op->fontwidth; - h = p->fontheight = op->fontheight; - p->fontwidthlog = op->fontwidthlog; - p->fontheightlog = op->fontheightlog; - if ((p->userfont = op->userfont)) - REFCOUNT(p->fontdata)++; /* increment usage counter */ - goto activate; - } - - if (!fontwidthvalid(p,w)) - /* Currently only fontwidth == 8 supported */ + int resize; + int w = op->width; + int h = op->height; + char *old_data = NULL; + + if (!fontwidthvalid(p,w)) { + if (userfont) + kfree(data); return -ENXIO; + } resize = (w != p->fontwidth) || (h != p->fontheight); - size = (w+7)/8 * h * 256; - if (p->userfont) - old_data = p->fontdata; - - if (userspace) { - if (!(new_data = kmalloc( 2*sizeof(int)+size, GFP_USER ))) - return -ENOMEM; - new_data += 2*sizeof(int); - FNTSIZE(new_data) = size; - REFCOUNT(new_data) = 1; /* usage counter */ - - for (i = 0; i < 256; i++) - for (j = 0; j < h; j++) - new_data[i*h+j] = data[i*32+j]; - - p->fontdata = new_data; - p->userfont = 1; - } else { - p->fontdata = data; - p->userfont = 0; - } + old_data = p->fontdata; + p->fontdata = data; + if ((p->userfont = userfont)) + REFCOUNT(data)++; p->fontwidth = w; p->fontheight = h; fbcon_font_widths(p); -activate: if (resize) { /* reset wrap/pan */ p->var.xoffset = p->var.yoffset = p->yscroll = 0; @@ -1269,6 +1215,82 @@ return 0; } +static inline int fbcon_copy_font(int unit, struct console_font_op *op) +{ + struct display *od, *p = &fb_display[unit]; + int h = op->height; + + if (h < 0 || !vc_cons_allocated( h )) + return -ENOTTY; + if (h == unit) + return 0; /* nothing to do */ + od = &fb_display[h]; + if (od->fontdata == p->fontdata) + return 0; /* already the same font... */ + return fbcon_do_set_font(unit, op, od->fontdata, od->userfont); +} + +static inline int fbcon_set_font(int unit, struct console_font_op *op) +{ + int w = op->width; + int h = op->height; + int size = (w+7)/8 * h * 256; + int i, j; + u8 *new_data, *data = op->data; + + if (w != 8 || op->charcount != 256) + return -EINVAL; + + if (!(new_data = kmalloc( 2*sizeof(int)+size, GFP_USER ))) + return -ENOMEM; + new_data += 2*sizeof(int); + FNTSIZE(new_data) = size; + REFCOUNT(new_data) = 0; /* usage counter */ + for (i = 0; i < 256; i++) + for (j = 0; j < h; j++) + new_data[i*h+j] = data[i*32+j]; + return fbcon_do_set_font(unit, op, new_data, 1); +} + +static inline int fbcon_set_def_font(int unit, struct console_font_op *op) +{ + char name[MAX_FONT_NAME]; + struct fbcon_font_desc *f; + struct display *p = &fb_display[unit]; + + if (!op->data) + f = fbcon_get_default_font(p->var.xres, p->var.yres); + else if (strncpy_from_user(name, op->data, MAX_FONT_NAME-1) < 0) + return -EFAULT; + else { + name[MAX_FONT_NAME-1] = 0; + if (!(f = fbcon_find_font(name))) + return -ENOENT; + } + op->width = f->width; + op->height = f->height; + op->charcount = 256; + return fbcon_do_set_font(unit, op, f->data, 0); +} + +static int fbcon_font_op(struct vc_data *conp, struct console_font_op *op) +{ + int unit = conp->vc_num; + + switch (op->op) { + case KD_FONT_OP_SET: + return fbcon_set_font(unit, op); + case KD_FONT_OP_GET: + return fbcon_get_font(unit, op); + case KD_FONT_OP_SET_DEFAULT: + return fbcon_set_def_font(unit, op); + case KD_FONT_OP_COPY: + return fbcon_copy_font(unit, op); + default: + return -ENOSYS; + } +} + static u16 palette_red[16]; static u16 palette_green[16]; static u16 palette_blue[16]; @@ -1299,6 +1321,7 @@ palette_cmap.len = 1<var.bits_per_pixel; else palette_cmap.len = 16; + palette_cmap.start = 0; return p->fb_info->fbops->fb_set_cmap(&palette_cmap, 1, unit, p->fb_info); } @@ -1307,8 +1330,6 @@ int unit, offset, limit, scrollback_old; struct display *p; - /* FIXME: Sync to new code, remember to set visible_origin */ - if (!scrollback_phys_max) return -ENOSYS; @@ -1346,6 +1367,8 @@ p->var.xoffset = 0; p->var.yoffset = offset*p->fontheight; p->fb_info->updatevar(unit, p->fb_info); + if (!offset) + fbcon_cursor(conp, CM_DRAW); return 0; } @@ -1375,7 +1398,6 @@ int first_col = use_256 ? 32 : depth > 4 ? 16 : 0; int num_cols = use_256 ? LINUX_LOGO_COLORS : 16; unsigned char *red, *green, *blue; - int old_cmap_len; if (use_256) { red = linux_logo_red; @@ -1388,11 +1410,6 @@ blue = linux_logo16_blue; } - /* dirty trick to avoid setcmap calling kmalloc which isn't - * initialized yet... */ - old_cmap_len = fb_display[fg_console].cmap.len; - fb_display[fg_console].cmap.len = 1 << (depth/(is_truecolor ? 3 : 1)); - for( i = 0; i < num_cols; i += n ) { n = num_cols - i; if (n > 16) @@ -1408,7 +1425,6 @@ p->fb_info->fbops->fb_set_cmap(&palette_cmap, 1, fg_console, p->fb_info); } - fb_display[fg_console].cmap.len = old_cmap_len; } if (depth >= 8) { @@ -1626,12 +1642,13 @@ con_bmove: fbcon_bmove, con_switch: fbcon_switch, con_blank: fbcon_blank, - con_get_font: fbcon_get_font, - con_set_font: fbcon_set_font, + con_font_op: fbcon_font_op, con_set_palette: fbcon_set_palette, con_scrolldelta: fbcon_scrolldelta, con_set_origin: NULL, con_save_screen: NULL, + con_build_attr: NULL, + con_invert_region: NULL, }; @@ -1657,3 +1674,4 @@ */ EXPORT_SYMBOL(fb_display); +EXPORT_SYMBOL(fbcon_redraw_bmove); diff -u --recursive --new-file v2.1.110/linux/drivers/video/fbcon.h linux/drivers/video/fbcon.h --- v2.1.110/linux/drivers/video/fbcon.h Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fbcon.h Tue Jul 21 10:28:24 1998 @@ -31,6 +31,7 @@ void (*revc)(struct display *p, int xx, int yy); void (*cursor)(struct display *p, int mode, int xx, int yy); int (*set_font)(struct display *p, int width, int height); + void (*clear_margins)(struct vc_data *conp, struct display *p); unsigned int fontwidthmask; /* 1 at (1 << (width - 1)) if width is supported */ }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/font.h linux/drivers/video/font.h --- v2.1.110/linux/drivers/video/font.h Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/font.h Tue Jul 21 10:28:24 1998 @@ -13,21 +13,37 @@ #include +struct fbcon_font_desc { + int idx; + char *name; + int width, height; + void *data; + int pref; +}; + +#define VGA8x8_IDX 0 +#define VGA8x16_IDX 1 +#define PEARL8x8_IDX 2 +#define VGA6x11_IDX 3 +#define SUN8x16_IDX 4 +#define SUN12x22_IDX 5 +#define ACORN8x8_IDX 6 + +extern struct fbcon_font_desc font_vga_8x8, + font_vga_8x16, + font_pearl_8x8, + font_vga_6x11, + font_sun_8x16, + font_sun_12x22, + font_acorn_8x8; - /* - * Find a font with a specific name - */ +/* Find a font with a specific name */ -extern int findsoftfont(char *name, unsigned short *width, unsigned short *height, u_char *data[]); +extern struct fbcon_font_desc *fbcon_find_font(char *name); +/* Get the default font for a specific screen size */ - /* - * Get the default font for a specific screen size - */ - -extern void getdefaultfont(int xres, int yres, char *name[], unsigned short *width, - unsigned short *height, u_char *data[]); - +extern struct fbcon_font_desc *fbcon_get_default_font(int xres, int yres); /* Max. length for the name of a predefined font */ #define MAX_FONT_NAME 32 diff -u --recursive --new-file v2.1.110/linux/drivers/video/font_6x11.c linux/drivers/video/font_6x11.c --- v2.1.110/linux/drivers/video/font_6x11.c Thu Mar 26 15:57:04 1998 +++ linux/drivers/video/font_6x11.c Tue Jul 21 10:28:24 1998 @@ -4,14 +4,11 @@ /* */ /**********************************************/ -#define FONTDATAMAX (11*256) - -char fontname_6x11[] = "ProFont6x11"; +#include "font.h" -int fontheight_6x11 = 11; -int fontwidth_6x11 = 6; +#define FONTDATAMAX (11*256) -unsigned char fontdata_6x11[FONTDATAMAX] = { +static unsigned char fontdata_6x11[FONTDATAMAX] = { /* 0 0x00 '^A' */ 0x00, /* 00000000 */ @@ -3343,3 +3340,12 @@ }; + +struct fbcon_font_desc font_vga_6x11 = { + VGA6x11_IDX, + "ProFont6x11", + 6, + 11, + fontdata_6x11, + -2000 /* Try avoiding this font if possible unless on MAC */ +}; diff -u --recursive --new-file v2.1.110/linux/drivers/video/font_8x16.c linux/drivers/video/font_8x16.c --- v2.1.110/linux/drivers/video/font_8x16.c Tue Sep 16 02:29:59 1997 +++ linux/drivers/video/font_8x16.c Tue Jul 21 10:28:24 1998 @@ -4,14 +4,11 @@ /* */ /**********************************************/ -#define FONTDATAMAX 4096 - -char fontname_8x16[] = "VGA8x16"; +#include "font.h" -int fontheight_8x16 = 16; -int fontwidth_8x16 = 8; +#define FONTDATAMAX 4096 -unsigned char fontdata_8x16[FONTDATAMAX] = { +static unsigned char fontdata_8x16[FONTDATAMAX] = { /* 0 0x00 '^@' */ 0x00, /* 00000000 */ @@ -4623,3 +4620,12 @@ }; + +struct fbcon_font_desc font_vga_8x16 = { + VGA8x16_IDX, + "VGA8x16", + 8, + 16, + fontdata_8x16, + 0 +}; diff -u --recursive --new-file v2.1.110/linux/drivers/video/font_8x8.c linux/drivers/video/font_8x8.c --- v2.1.110/linux/drivers/video/font_8x8.c Tue Sep 16 02:30:02 1997 +++ linux/drivers/video/font_8x8.c Tue Jul 21 10:28:24 1998 @@ -4,14 +4,11 @@ /* */ /**********************************************/ -#define FONTDATAMAX 2048 - -char fontname_8x8[] = "VGA8x8"; +#include "font.h" -int fontheight_8x8 = 8; -int fontwidth_8x8 = 8; +#define FONTDATAMAX 2048 -unsigned char fontdata_8x8[FONTDATAMAX] = { +static unsigned char fontdata_8x8[FONTDATAMAX] = { /* 0 0x00 '^@' */ 0x00, /* 00000000 */ @@ -2575,3 +2572,12 @@ }; + +struct fbcon_font_desc font_vga_8x8 = { + VGA8x8_IDX, + "VGA8x8", + 8, + 8, + fontdata_8x8, + 0 +}; diff -u --recursive --new-file v2.1.110/linux/drivers/video/font_acorn_8x8.c linux/drivers/video/font_acorn_8x8.c --- v2.1.110/linux/drivers/video/font_acorn_8x8.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/video/font_acorn_8x8.c Tue Jul 21 10:28:24 1998 @@ -0,0 +1,275 @@ +/* Acorn-like font definition, with PC graphics characters */ + +#include "font.h" + +static unsigned char acorndata_8x8[] = { +/* 00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ^@ */ +/* 01 */ 0x7e, 0x81, 0xa5, 0x81, 0xbd, 0x99, 0x81, 0x7e, /* ^A */ +/* 02 */ 0x7e, 0xff, 0xbd, 0xff, 0xc3, 0xe7, 0xff, 0x7e, /* ^B */ +/* 03 */ 0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, 0x00, /* ^C */ +/* 04 */ 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, 0x00, /* ^D */ +/* 05 */ 0x00, 0x18, 0x3c, 0xe7, 0xe7, 0x3c, 0x18, 0x00, /* ^E */ +/* 06 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 07 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 08 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 09 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0A */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0B */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0C */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0D */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0E */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 0F */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 10 */ 0x00, 0x60, 0x78, 0x7e, 0x7e, 0x78, 0x60, 0x00, /* |> */ +/* 11 */ 0x00, 0x06, 0x1e, 0x7e, 0x7e, 0x1e, 0x06, 0x00, /* <| */ +/* 12 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 13 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 14 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 15 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 16 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 17 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 18 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 19 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 1A */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 1B */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 1C */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 1D */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 1E */ 0x00, 0x18, 0x18, 0x3c, 0x3c, 0x7e, 0x7e, 0x00, /* /\ */ +/* 1F */ 0x00, 0x7e, 0x7e, 0x3c, 0x3c, 0x18, 0x18, 0x00, /* \/ */ +/* 20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* */ +/* 21 */ 0x18, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x00, /* ! */ +/* 22 */ 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, /* " */ +/* 23 */ 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00, /* # */ +/* 24 */ 0x0C, 0x3F, 0x68, 0x3E, 0x0B, 0x7E, 0x18, 0x00, /* $ */ +/* 25 */ 0x60, 0x66, 0x0C, 0x18, 0x30, 0x66, 0x06, 0x00, /* % */ +/* 26 */ 0x38, 0x6C, 0x6C, 0x38, 0x6D, 0x66, 0x3B, 0x00, /* & */ +/* 27 */ 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, /* ' */ +/* 28 */ 0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, /* ( */ +/* 29 */ 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, /* ) */ +/* 2A */ 0x00, 0x18, 0x7E, 0x3C, 0x7E, 0x18, 0x00, 0x00, /* * */ +/* 2B */ 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, /* + */ +/* 2C */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, /* , */ +/* 2D */ 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, /* - */ +/* 2E */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, /* . */ +/* 2F */ 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, /* / */ +/* 30 */ 0x3C, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0x3C, 0x00, /* 0 */ +/* 31 */ 0x18, 0x38, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, /* 1 */ +/* 32 */ 0x3C, 0x66, 0x06, 0x0C, 0x18, 0x30, 0x7E, 0x00, /* 2 */ +/* 33 */ 0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 0x00, /* 3 */ +/* 34 */ 0x0C, 0x1C, 0x3C, 0x6C, 0x7E, 0x0C, 0x0C, 0x00, /* 4 */ +/* 35 */ 0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C, 0x00, /* 5 */ +/* 36 */ 0x1C, 0x30, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0x00, /* 6 */ +/* 37 */ 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00, /* 7 */ +/* 38 */ 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00, /* 8 */ +/* 39 */ 0x3C, 0x66, 0x66, 0x3E, 0x06, 0x0C, 0x38, 0x00, /* 9 */ +/* 3A */ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, /* : */ +/* 3B */ 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x30, /* ; */ +/* 3C */ 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00, /* < */ +/* 3D */ 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00, /* = */ +/* 3E */ 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00, /* > */ +/* 3F */ 0x3C, 0x66, 0x0C, 0x18, 0x18, 0x00, 0x18, 0x00, /* ? */ +/* 40 */ 0x3C, 0x66, 0x6E, 0x6A, 0x6E, 0x60, 0x3C, 0x00, /* @ */ +/* 41 */ 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, /* A */ +/* 42 */ 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00, /* B */ +/* 43 */ 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x00, /* C */ +/* 44 */ 0x78, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0x78, 0x00, /* D */ +/* 45 */ 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x7E, 0x00, /* E */ +/* 46 */ 0x7E, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x00, /* F */ +/* 47 */ 0x3C, 0x66, 0x60, 0x6E, 0x66, 0x66, 0x3C, 0x00, /* G */ +/* 48 */ 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00, /* H */ +/* 49 */ 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, /* I */ +/* 4A */ 0x3E, 0x0C, 0x0C, 0x0C, 0x0C, 0x6C, 0x38, 0x00, /* J */ +/* 4B */ 0x66, 0x6C, 0x78, 0x70, 0x78, 0x6C, 0x66, 0x00, /* K */ +/* 4C */ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x00, /* L */ +/* 4D */ 0x63, 0x77, 0x7F, 0x6B, 0x6B, 0x63, 0x63, 0x00, /* M */ +/* 4E */ 0x66, 0x66, 0x76, 0x7E, 0x6E, 0x66, 0x66, 0x00, /* N */ +/* 4F */ 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, /* O */ +/* 50 */ 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x00, /* P */ +/* 51 */ 0x3C, 0x66, 0x66, 0x66, 0x6A, 0x6C, 0x36, 0x00, /* Q */ +/* 52 */ 0x7C, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x66, 0x00, /* R */ +/* 53 */ 0x3C, 0x66, 0x60, 0x3C, 0x06, 0x66, 0x3C, 0x00, /* S */ +/* 54 */ 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, /* T */ +/* 55 */ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, /* U */ +/* 56 */ 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, /* V */ +/* 57 */ 0x63, 0x63, 0x6B, 0x6B, 0x7F, 0x77, 0x63, 0x00, /* W */ +/* 58 */ 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00, /* X */ +/* 59 */ 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00, /* Y */ +/* 5A */ 0x7E, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x7E, 0x00, /* Z */ +/* 5B */ 0x7C, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7C, 0x00, /* [ */ +/* 5C */ 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, /* \ */ +/* 5D */ 0x3E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3E, 0x00, /* ] */ +/* 5E */ 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ^ */ +/* 5F */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, /* _ */ +/* 60 */ 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* ` */ +/* 61 */ 0x00, 0x00, 0x3C, 0x06, 0x3E, 0x66, 0x3E, 0x00, /* a */ +/* 62 */ 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00, /* b */ +/* 63 */ 0x00, 0x00, 0x3C, 0x66, 0x60, 0x66, 0x3C, 0x00, /* c */ +/* 64 */ 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x3E, 0x00, /* d */ +/* 65 */ 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00, /* e */ +/* 66 */ 0x1C, 0x30, 0x30, 0x7C, 0x30, 0x30, 0x30, 0x00, /* f */ +/* 67 */ 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x3C, /* g */ +/* 68 */ 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00, /* h */ +/* 69 */ 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00, /* i */ +/* 6A */ 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x70, /* j */ +/* 6B */ 0x60, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0x00, /* k */ +/* 6C */ 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, /* l */ +/* 6D */ 0x00, 0x00, 0x36, 0x7F, 0x6B, 0x6B, 0x63, 0x00, /* m */ +/* 6E */ 0x00, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x00, /* n */ +/* 6F */ 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, /* o */ +/* 70 */ 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, /* p */ +/* 71 */ 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x07, /* q */ +/* 72 */ 0x00, 0x00, 0x6C, 0x76, 0x60, 0x60, 0x60, 0x00, /* r */ +/* 73 */ 0x00, 0x00, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x00, /* s */ +/* 74 */ 0x30, 0x30, 0x7C, 0x30, 0x30, 0x30, 0x1C, 0x00, /* t */ +/* 75 */ 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00, /* u */ +/* 76 */ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, /* v */ +/* 77 */ 0x00, 0x00, 0x63, 0x6B, 0x6B, 0x7F, 0x36, 0x00, /* w */ +/* 78 */ 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00, /* x */ +/* 79 */ 0x00, 0x00, 0x66, 0x66, 0x66, 0x3E, 0x06, 0x3C, /* y */ +/* 7A */ 0x00, 0x00, 0x7E, 0x0C, 0x18, 0x30, 0x7E, 0x00, /* z */ +/* 7B */ 0x0C, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0C, 0x00, /* { */ +/* 7C */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, /* | */ +/* 7D */ 0x30, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x30, 0x00, /* } */ +/* 7E */ 0x31, 0x6B, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, /* ~ */ +/* 7F */ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, /*  */ +/* 80 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 81 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 82 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 83 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 84 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 85 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 86 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 87 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 88 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 89 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 8A */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 8B */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 8C */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 8D */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 8E */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 8F */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 90 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 91 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 92 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 93 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 94 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 95 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 96 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 97 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 98 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 99 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 9A */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 9B */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 9C */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 9D */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 9E */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* 9F */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* A0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* A1 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* A2 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* A3 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* A4 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* A5 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* A6 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* A7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* A8 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* A9 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* AA */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* AB */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* AC */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* AD */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* AE */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* AF */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* B0 */ 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, +/* B1 */ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, +/* B2 */ 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, 0xdd, 0x77, +/* B3 */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, +/* B4 */ 0x18, 0x18, 0x18, 0xf8, 0x18, 0x18, 0x18, 0x18, +/* B5 */ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, +/* B6 */ 0x66, 0x66, 0x66, 0xe6, 0x66, 0x66, 0x66, 0x66, +/* B7 */ 0x00, 0x00, 0x00, 0xfe, 0x66, 0x66, 0x66, 0x66, +/* B8 */ 0x00, 0x00, 0xf8, 0x18, 0xf8, 0x18, 0x18, 0x18, +/* B9 */ 0x66, 0x66, 0xe6, 0x06, 0xe6, 0x66, 0x66, 0x66, +/* BA */ 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, +/* BB */ 0x00, 0x00, 0xfe, 0x06, 0xe6, 0x66, 0x66, 0x66, +/* BC */ 0x66, 0x66, 0xe6, 0x06, 0xfe, 0x00, 0x00, 0x00, +/* BD */ 0x66, 0x66, 0x66, 0xfe, 0x00, 0x00, 0x00, 0x00, +/* BE */ 0x18, 0x18, 0xf8, 0x18, 0xf8, 0x00, 0x00, 0x00, +/* BF */ 0x00, 0x00, 0x00, 0xf8, 0x18, 0x18, 0x18, 0x18, +/* C0 */ 0x18, 0x18, 0x18, 0x1f, 0x00, 0x00, 0x00, 0x00, +/* C1 */ 0x18, 0x18, 0x18, 0xff, 0x00, 0x00, 0x00, 0x00, +/* C2 */ 0x00, 0x00, 0x00, 0xff, 0x18, 0x18, 0x18, 0x18, +/* C3 */ 0x18, 0x18, 0x18, 0x1f, 0x18, 0x18, 0x18, 0x18, +/* C4 */ 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, +/* C5 */ 0x18, 0x18, 0x18, 0xff, 0x18, 0x18, 0x18, 0x18, +/* C6 */ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, +/* C7 */ 0x66, 0x66, 0x66, 0x67, 0x66, 0x66, 0x66, 0x66, +/* C8 */ 0x66, 0x66, 0x67, 0x60, 0x7f, 0x00, 0x00, 0x00, +/* C9 */ 0x00, 0x00, 0x7f, 0x60, 0x67, 0x66, 0x66, 0x66, +/* CA */ 0x66, 0x66, 0xe7, 0x00, 0xff, 0x00, 0x00, 0x00, +/* CB */ 0x00, 0x00, 0xff, 0x00, 0xe7, 0x66, 0x66, 0x66, +/* CC */ 0x66, 0x66, 0x67, 0x60, 0x67, 0x66, 0x66, 0x66, +/* CD */ 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, +/* CE */ 0x66, 0x66, 0xe7, 0x00, 0xe7, 0x66, 0x66, 0x66, +/* CF */ 0x18, 0x18, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, +/* D0 */ 0x66, 0x66, 0x66, 0xff, 0x00, 0x00, 0x00, 0x00, +/* D1 */ 0x00, 0x00, 0xff, 0x00, 0xff, 0x18, 0x18, 0x18, +/* D2 */ 0x00, 0x00, 0x00, 0xff, 0x66, 0x66, 0x66, 0x66, +/* D3 */ 0x66, 0x66, 0x66, 0x7f, 0x00, 0x00, 0x00, 0x00, +/* D4 */ 0x18, 0x18, 0x1f, 0x18, 0x1f, 0x00, 0x00, 0x00, +/* D5 */ 0x00, 0x00, 0x1f, 0x18, 0x1f, 0x18, 0x18, 0x18, +/* D6 */ 0x00, 0x00, 0x00, 0x7f, 0x66, 0x66, 0x66, 0x66, +/* D7 */ 0x66, 0x66, 0x66, 0xff, 0x66, 0x66, 0x66, 0x66, +/* D8 */ 0x18, 0x18, 0xff, 0x18, 0xff, 0x18, 0x18, 0x18, +/* D9 */ 0x18, 0x18, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, +/* DA */ 0x00, 0x00, 0x00, 0x1f, 0x18, 0x18, 0x18, 0x18, +/* DB */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +/* DC */ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, +/* DD */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, +/* DE */ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, +/* DF */ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, +/* E0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* E1 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* E2 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* E3 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* E4 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* E5 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* E6 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* E7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* E8 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* E9 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* EA */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* EB */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* EC */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* ED */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* EE */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* EF */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* F0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* F1 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* F2 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* F3 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* F4 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* F5 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* F6 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* F7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* F8 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* F9 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* FA */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* FB */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* FC */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* FD */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* FE */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +/* FF */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +struct fbcon_font_desc font_acorn_8x8 = { + ACORN8x8_IDX, + "Acorn8x8", + 8, + 8, + acorndata_8x8, +#ifdef CONFIG_ARCH_ACORN + 20 +#else + 0 +#endif +}; diff -u --recursive --new-file v2.1.110/linux/drivers/video/font_pearl_8x8.c linux/drivers/video/font_pearl_8x8.c --- v2.1.110/linux/drivers/video/font_pearl_8x8.c Wed Dec 31 16:00:00 1969 +++ linux/drivers/video/font_pearl_8x8.c Tue Jul 21 10:28:24 1998 @@ -0,0 +1,2587 @@ +/**********************************************/ +/* */ +/* Font file generated by cpi2fnt */ +/* ------------------------------ */ +/* Combined with the alpha-numeric */ +/* portion of Greg Harp's old PEARL */ +/* font (from earlier versions of */ +/* linux-m86k) by John Shifflett */ +/* */ +/**********************************************/ + +#include "font.h" + +#define FONTDATAMAX 2048 + +static unsigned char fontdata_pearl8x8[FONTDATAMAX] = { + + /* 0 0x00 '^@' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 1 0x01 '^A' */ + 0x7e, /* 01111110 */ + 0x81, /* 10000001 */ + 0xa5, /* 10100101 */ + 0x81, /* 10000001 */ + 0xbd, /* 10111101 */ + 0x99, /* 10011001 */ + 0x81, /* 10000001 */ + 0x7e, /* 01111110 */ + + /* 2 0x02 '^B' */ + 0x7e, /* 01111110 */ + 0xff, /* 11111111 */ + 0xdb, /* 11011011 */ + 0xff, /* 11111111 */ + 0xc3, /* 11000011 */ + 0xe7, /* 11100111 */ + 0xff, /* 11111111 */ + 0x7e, /* 01111110 */ + + /* 3 0x03 '^C' */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x00, /* 00000000 */ + + /* 4 0x04 '^D' */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x7c, /* 01111100 */ + 0xfe, /* 11111110 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0x10, /* 00010000 */ + 0x00, /* 00000000 */ + + /* 5 0x05 '^E' */ + 0x38, /* 00111000 */ + 0x7c, /* 01111100 */ + 0x38, /* 00111000 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0xd6, /* 11010110 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + + /* 6 0x06 '^F' */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x7c, /* 01111100 */ + 0xfe, /* 11111110 */ + 0xfe, /* 11111110 */ + 0x7c, /* 01111100 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + + /* 7 0x07 '^G' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 8 0x08 '^H' */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xe7, /* 11100111 */ + 0xc3, /* 11000011 */ + 0xc3, /* 11000011 */ + 0xe7, /* 11100111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* 9 0x09 '^I' */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x42, /* 01000010 */ + 0x42, /* 01000010 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* 10 0x0a '^J' */ + 0xff, /* 11111111 */ + 0xc3, /* 11000011 */ + 0x99, /* 10011001 */ + 0xbd, /* 10111101 */ + 0xbd, /* 10111101 */ + 0x99, /* 10011001 */ + 0xc3, /* 11000011 */ + 0xff, /* 11111111 */ + + /* 11 0x0b '^K' */ + 0x0f, /* 00001111 */ + 0x07, /* 00000111 */ + 0x0f, /* 00001111 */ + 0x7d, /* 01111101 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x78, /* 01111000 */ + + /* 12 0x0c '^L' */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + + /* 13 0x0d '^M' */ + 0x3f, /* 00111111 */ + 0x33, /* 00110011 */ + 0x3f, /* 00111111 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x70, /* 01110000 */ + 0xf0, /* 11110000 */ + 0xe0, /* 11100000 */ + + /* 14 0x0e '^N' */ + 0x7f, /* 01111111 */ + 0x63, /* 01100011 */ + 0x7f, /* 01111111 */ + 0x63, /* 01100011 */ + 0x63, /* 01100011 */ + 0x67, /* 01100111 */ + 0xe6, /* 11100110 */ + 0xc0, /* 11000000 */ + + /* 15 0x0f '^O' */ + 0x18, /* 00011000 */ + 0xdb, /* 11011011 */ + 0x3c, /* 00111100 */ + 0xe7, /* 11100111 */ + 0xe7, /* 11100111 */ + 0x3c, /* 00111100 */ + 0xdb, /* 11011011 */ + 0x18, /* 00011000 */ + + /* 16 0x10 '^P' */ + 0x80, /* 10000000 */ + 0xe0, /* 11100000 */ + 0xf8, /* 11111000 */ + 0xfe, /* 11111110 */ + 0xf8, /* 11111000 */ + 0xe0, /* 11100000 */ + 0x80, /* 10000000 */ + 0x00, /* 00000000 */ + + /* 17 0x11 '^Q' */ + 0x02, /* 00000010 */ + 0x0e, /* 00001110 */ + 0x3e, /* 00111110 */ + 0xfe, /* 11111110 */ + 0x3e, /* 00111110 */ + 0x0e, /* 00001110 */ + 0x02, /* 00000010 */ + 0x00, /* 00000000 */ + + /* 18 0x12 '^R' */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + + /* 19 0x13 '^S' */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + + /* 20 0x14 '^T' */ + 0x7f, /* 01111111 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0x7b, /* 01111011 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x00, /* 00000000 */ + + /* 21 0x15 '^U' */ + 0x3e, /* 00111110 */ + 0x61, /* 01100001 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x86, /* 10000110 */ + 0x7c, /* 01111100 */ + + /* 22 0x16 '^V' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* 23 0x17 '^W' */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + + /* 24 0x18 '^X' */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 25 0x19 '^Y' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 26 0x1a '^Z' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0xfe, /* 11111110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 27 0x1b '^[' */ + 0x00, /* 00000000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xfe, /* 11111110 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 28 0x1c '^\' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 29 0x1d '^]' */ + 0x00, /* 00000000 */ + 0x24, /* 00100100 */ + 0x66, /* 01100110 */ + 0xff, /* 11111111 */ + 0x66, /* 01100110 */ + 0x24, /* 00100100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 30 0x1e '^^' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 31 0x1f '^_' */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0x7e, /* 01111110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 32 0x20 ' ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 33 0x21 '!' */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 34 0x22 '"' */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 35 0x23 '#' */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + + /* 36 0x24 '$' */ + 0x18, /* 00011000 */ + 0x3e, /* 00111110 */ + 0x60, /* 01100000 */ + 0x3c, /* 00111100 */ + 0x06, /* 00000110 */ + 0x7c, /* 01111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 37 0x25 '%' */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xcc, /* 11001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x66, /* 01100110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 38 0x26 '&' */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x68, /* 01101000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* 39 0x27 ''' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 40 0x28 '(' */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + + /* 41 0x29 ')' */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + + /* 42 0x2a '*' */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0xff, /* 11111111 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 43 0x2b '+' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 44 0x2c ',' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + + /* 45 0x2d '-' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 46 0x2e '.' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 47 0x2f '/' */ + 0x03, /* 00000011 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + + /* 48 0x30 '0' */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xde, /* 11011110 */ + 0xfe, /* 11111110 */ + 0xf6, /* 11110110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 49 0x31 '1' */ + 0x18, /* 00011000 */ + 0x78, /* 01111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 50 0x32 '2' */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* 51 0x33 '3' */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x06, /* 00000110 */ + 0x1c, /* 00011100 */ + 0x06, /* 00000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 52 0x34 '4' */ + 0x1c, /* 00011100 */ + 0x3c, /* 00111100 */ + 0x6c, /* 01101100 */ + 0xcc, /* 11001100 */ + 0xfe, /* 11111110 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + + /* 53 0x35 '5' */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xfc, /* 11111100 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 54 0x36 '6' */ + 0x38, /* 00111000 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 55 0x37 '7' */ + 0xfe, /* 11111110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + + /* 56 0x38 '8' */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 57 0x39 '9' */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + + /* 58 0x3a ':' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 59 0x3b ';' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + + /* 60 0x3c '<' */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + + /* 61 0x3d '=' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 62 0x3e '>' */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + + /* 63 0x3f '?' */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 64 0x40 '@' */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xde, /* 11011110 */ + 0xde, /* 11011110 */ + 0xde, /* 11011110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 65 0x41 'A' */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 66 0x42 'B' */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfc, /* 11111100 */ + 0x00, /* 00000000 */ + + /* 67 0x43 'C' */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 68 0x44 'D' */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfc, /* 11111100 */ + 0x00, /* 00000000 */ + + /* 69 0x45 'E' */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xf8, /* 11111000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* 70 0x46 'F' */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xf8, /* 11111000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + + /* 71 0x47 'G' */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xce, /* 11001110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 72 0x48 'H' */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 73 0x49 'I' */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* 74 0x4a 'J' */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 75 0x4b 'K' */ + 0xc6, /* 11000110 */ + 0xcc, /* 11001100 */ + 0xd8, /* 11011000 */ + 0xf0, /* 11110000 */ + 0xd8, /* 11011000 */ + 0xcc, /* 11001100 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 76 0x4c 'L' */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* 77 0x4d 'M' */ + 0x82, /* 10000010 */ + 0xc6, /* 11000110 */ + 0xee, /* 11101110 */ + 0xfe, /* 11111110 */ + 0xd6, /* 11010110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 78 0x4e 'N' */ + 0xc6, /* 11000110 */ + 0xe6, /* 11100110 */ + 0xf6, /* 11110110 */ + 0xde, /* 11011110 */ + 0xce, /* 11001110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 79 0x4f 'O' */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 80 0x50 'P' */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfc, /* 11111100 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + + /* 81 0x51 'Q' */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xf6, /* 11110110 */ + 0xde, /* 11011110 */ + 0x7c, /* 01111100 */ + 0x06, /* 00000110 */ + + /* 82 0x52 'R' */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfc, /* 11111100 */ + 0xd8, /* 11011000 */ + 0xcc, /* 11001100 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 83 0x53 'S' */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0x60, /* 01100000 */ + 0x38, /* 00111000 */ + 0x0c, /* 00001100 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 84 0x54 'T' */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 85 0x55 'U' */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 86 0x56 'V' */ + 0xc3, /* 11000011 */ + 0xc3, /* 11000011 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 87 0x57 'W' */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xfe, /* 11111110 */ + 0xee, /* 11101110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 88 0x58 'X' */ + 0xc3, /* 11000011 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0xc3, /* 11000011 */ + 0x00, /* 00000000 */ + + /* 89 0x59 'Y' */ + 0xc3, /* 11000011 */ + 0xc3, /* 11000011 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 90 0x5a 'Z' */ + 0xfe, /* 11111110 */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* 91 0x5b '[' */ + 0x3c, /* 00111100 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* 92 0x5c '\' */ + 0xc0, /* 11000000 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x06, /* 00000110 */ + 0x03, /* 00000011 */ + 0x00, /* 00000000 */ + + /* 93 0x5d ']' */ + 0x3c, /* 00111100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* 94 0x5e '^' */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 95 0x5f '_' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + + /* 96 0x60 '`' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 97 0x61 'a' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0x06, /* 00000110 */ + 0x7e, /* 01111110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* 98 0x62 'b' */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfc, /* 11111100 */ + 0x00, /* 00000000 */ + + /* 99 0x63 'c' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 100 0x64 'd' */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x7e, /* 01111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* 101 0x65 'e' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 102 0x66 'f' */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x60, /* 01100000 */ + 0xf0, /* 11110000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x60, /* 01100000 */ + 0x00, /* 00000000 */ + + /* 103 0x67 'g' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0x7c, /* 01111100 */ + + /* 104 0x68 'h' */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 105 0x69 'i' */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 106 0x6a 'j' */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + + /* 107 0x6b 'k' */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xcc, /* 11001100 */ + 0xd8, /* 11011000 */ + 0xf0, /* 11110000 */ + 0xd8, /* 11011000 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + + /* 108 0x6c 'l' */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 109 0x6d 'm' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xec, /* 11101100 */ + 0xfe, /* 11111110 */ + 0xd6, /* 11010110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 110 0x6e 'n' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 111 0x6f 'o' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 112 0x70 'p' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfc, /* 11111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfc, /* 11111100 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + + /* 113 0x71 'q' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + + /* 114 0x72 'r' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0xe6, /* 11100110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + + /* 115 0x73 's' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x06, /* 00000110 */ + 0xfc, /* 11111100 */ + 0x00, /* 00000000 */ + + /* 116 0x74 't' */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x7c, /* 01111100 */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x36, /* 00110110 */ + 0x1c, /* 00011100 */ + 0x00, /* 00000000 */ + + /* 117 0x75 'u' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 118 0x76 'v' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + + /* 119 0x77 'w' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xd6, /* 11010110 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + + /* 120 0x78 'x' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 121 0x79 'y' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xc3, /* 11000011 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + + /* 122 0x7a 'z' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x0c, /* 00001100 */ + 0x38, /* 00111000 */ + 0x60, /* 01100000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* 123 0x7b '{' */ + 0x0e, /* 00001110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x70, /* 01110000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x0e, /* 00001110 */ + 0x00, /* 00000000 */ + + /* 124 0x7c '|' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 125 0x7d '}' */ + 0x70, /* 01110000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x0e, /* 00001110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + + /* 126 0x7e '~' */ + 0x72, /* 01110010 */ + 0x9c, /* 10011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 127 0x7f '' */ + 0x00, /* 00000000 */ + 0x10, /* 00010000 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* 128 0x80 '€' */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x0c, /* 00001100 */ + 0x78, /* 01111000 */ + + /* 129 0x81 '' */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* 130 0x82 '‚' */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 131 0x83 'ƒ' */ + 0x7c, /* 01111100 */ + 0x82, /* 10000010 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* 132 0x84 '„' */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* 133 0x85 '…' */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* 134 0x86 '†' */ + 0x30, /* 00110000 */ + 0x30, /* 00110000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* 135 0x87 '‡' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x7e, /* 01111110 */ + 0x0c, /* 00001100 */ + 0x38, /* 00111000 */ + + /* 136 0x88 'ˆ' */ + 0x7c, /* 01111100 */ + 0x82, /* 10000010 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 137 0x89 '‰' */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 138 0x8a 'Š' */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 139 0x8b '‹' */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* 140 0x8c 'Œ' */ + 0x7c, /* 01111100 */ + 0x82, /* 10000010 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* 141 0x8d '' */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* 142 0x8e 'Ž' */ + 0xc6, /* 11000110 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 143 0x8f '' */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 144 0x90 '' */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xf8, /* 11111000 */ + 0xc0, /* 11000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* 145 0x91 '‘' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0xd8, /* 11011000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* 146 0x92 '’' */ + 0x3e, /* 00111110 */ + 0x6c, /* 01101100 */ + 0xcc, /* 11001100 */ + 0xfe, /* 11111110 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xce, /* 11001110 */ + 0x00, /* 00000000 */ + + /* 147 0x93 '“' */ + 0x7c, /* 01111100 */ + 0x82, /* 10000010 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 148 0x94 '”' */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 149 0x95 '•' */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 150 0x96 '–' */ + 0x78, /* 01111000 */ + 0x84, /* 10000100 */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* 151 0x97 '—' */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* 152 0x98 '˜' */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7e, /* 01111110 */ + 0x06, /* 00000110 */ + 0xfc, /* 11111100 */ + + /* 153 0x99 '™' */ + 0xc6, /* 11000110 */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + + /* 154 0x9a 'š' */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 155 0x9b '›' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 156 0x9c 'œ' */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x64, /* 01100100 */ + 0xf0, /* 11110000 */ + 0x60, /* 01100000 */ + 0x66, /* 01100110 */ + 0xfc, /* 11111100 */ + 0x00, /* 00000000 */ + + /* 157 0x9d '' */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 158 0x9e 'ž' */ + 0xf8, /* 11111000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xfa, /* 11111010 */ + 0xc6, /* 11000110 */ + 0xcf, /* 11001111 */ + 0xc6, /* 11000110 */ + 0xc7, /* 11000111 */ + + /* 159 0x9f 'Ÿ' */ + 0x0e, /* 00001110 */ + 0x1b, /* 00011011 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0xd8, /* 11011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + + /* 160 0xa0 ' ' */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x7c, /* 01111100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* 161 0xa1 '¡' */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x38, /* 00111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* 162 0xa2 '¢' */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + + /* 163 0xa3 '£' */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* 164 0xa4 '¤' */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0xdc, /* 11011100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x00, /* 00000000 */ + + /* 165 0xa5 '¥' */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0xe6, /* 11100110 */ + 0xf6, /* 11110110 */ + 0xde, /* 11011110 */ + 0xce, /* 11001110 */ + 0x00, /* 00000000 */ + + /* 166 0xa6 '¦' */ + 0x3c, /* 00111100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x3e, /* 00111110 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 167 0xa7 '§' */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 168 0xa8 '¨' */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x63, /* 01100011 */ + 0x3e, /* 00111110 */ + 0x00, /* 00000000 */ + + /* 169 0xa9 '©' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 170 0xaa 'ª' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x06, /* 00000110 */ + 0x06, /* 00000110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 171 0xab '«' */ + 0x63, /* 01100011 */ + 0xe6, /* 11100110 */ + 0x6c, /* 01101100 */ + 0x7e, /* 01111110 */ + 0x33, /* 00110011 */ + 0x66, /* 01100110 */ + 0xcc, /* 11001100 */ + 0x0f, /* 00001111 */ + + /* 172 0xac '¬' */ + 0x63, /* 01100011 */ + 0xe6, /* 11100110 */ + 0x6c, /* 01101100 */ + 0x7a, /* 01111010 */ + 0x36, /* 00110110 */ + 0x6a, /* 01101010 */ + 0xdf, /* 11011111 */ + 0x06, /* 00000110 */ + + /* 173 0xad '­' */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 174 0xae '®' */ + 0x00, /* 00000000 */ + 0x33, /* 00110011 */ + 0x66, /* 01100110 */ + 0xcc, /* 11001100 */ + 0x66, /* 01100110 */ + 0x33, /* 00110011 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 175 0xaf '¯' */ + 0x00, /* 00000000 */ + 0xcc, /* 11001100 */ + 0x66, /* 01100110 */ + 0x33, /* 00110011 */ + 0x66, /* 01100110 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 176 0xb0 '°' */ + 0x22, /* 00100010 */ + 0x88, /* 10001000 */ + 0x22, /* 00100010 */ + 0x88, /* 10001000 */ + 0x22, /* 00100010 */ + 0x88, /* 10001000 */ + 0x22, /* 00100010 */ + 0x88, /* 10001000 */ + + /* 177 0xb1 '±' */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + 0x55, /* 01010101 */ + 0xaa, /* 10101010 */ + + /* 178 0xb2 '²' */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + 0x77, /* 01110111 */ + 0xdd, /* 11011101 */ + + /* 179 0xb3 '³' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 180 0xb4 '´' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 181 0xb5 'µ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 182 0xb6 '¶' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf6, /* 11110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 183 0xb7 '·' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 184 0xb8 '¸' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 185 0xb9 '¹' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf6, /* 11110110 */ + 0x06, /* 00000110 */ + 0xf6, /* 11110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 186 0xba 'º' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 187 0xbb '»' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x06, /* 00000110 */ + 0xf6, /* 11110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 188 0xbc '¼' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf6, /* 11110110 */ + 0x06, /* 00000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 189 0xbd '½' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 190 0xbe '¾' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 191 0xbf '¿' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xf8, /* 11111000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 192 0xc0 'À' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 193 0xc1 'Á' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 194 0xc2 'Â' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 195 0xc3 'Ã' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 196 0xc4 'Ä' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 197 0xc5 'Å' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 198 0xc6 'Æ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 199 0xc7 'Ç' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x37, /* 00110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 200 0xc8 'È' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x37, /* 00110111 */ + 0x30, /* 00110000 */ + 0x3f, /* 00111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 201 0xc9 'É' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3f, /* 00111111 */ + 0x30, /* 00110000 */ + 0x37, /* 00110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 202 0xca 'Ê' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf7, /* 11110111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 203 0xcb 'Ë' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xf7, /* 11110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 204 0xcc 'Ì' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x37, /* 00110111 */ + 0x30, /* 00110000 */ + 0x37, /* 00110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 205 0xcd 'Í' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 206 0xce 'Î' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xf7, /* 11110111 */ + 0x00, /* 00000000 */ + 0xf7, /* 11110111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 207 0xcf 'Ï' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 208 0xd0 'Ð' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 209 0xd1 'Ñ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 210 0xd2 'Ò' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 211 0xd3 'Ó' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x3f, /* 00111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 212 0xd4 'Ô' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 213 0xd5 'Õ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 214 0xd6 'Ö' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3f, /* 00111111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 215 0xd7 '×' */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0xff, /* 11111111 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + + /* 216 0xd8 'Ø' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0xff, /* 11111111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 217 0xd9 'Ù' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xf8, /* 11111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 218 0xda 'Ú' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x1f, /* 00011111 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 219 0xdb 'Û' */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* 220 0xdc 'Ü' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + + /* 221 0xdd 'Ý' */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + 0xf0, /* 11110000 */ + + /* 222 0xde 'Þ' */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + 0x0f, /* 00001111 */ + + /* 223 0xdf 'ß' */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0xff, /* 11111111 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 224 0xe0 'à' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0xc8, /* 11001000 */ + 0xdc, /* 11011100 */ + 0x76, /* 01110110 */ + 0x00, /* 00000000 */ + + /* 225 0xe1 'á' */ + 0x78, /* 01111000 */ + 0xcc, /* 11001100 */ + 0xcc, /* 11001100 */ + 0xd8, /* 11011000 */ + 0xcc, /* 11001100 */ + 0xc6, /* 11000110 */ + 0xcc, /* 11001100 */ + 0x00, /* 00000000 */ + + /* 226 0xe2 'â' */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0xc0, /* 11000000 */ + 0x00, /* 00000000 */ + + /* 227 0xe3 'ã' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x00, /* 00000000 */ + + /* 228 0xe4 'ä' */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + + /* 229 0xe5 'å' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0x70, /* 01110000 */ + 0x00, /* 00000000 */ + + /* 230 0xe6 'æ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x7c, /* 01111100 */ + 0xc0, /* 11000000 */ + + /* 231 0xe7 'ç' */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + + /* 232 0xe8 'è' */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x3c, /* 00111100 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + + /* 233 0xe9 'é' */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xfe, /* 11111110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + + /* 234 0xea 'ê' */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0xee, /* 11101110 */ + 0x00, /* 00000000 */ + + /* 235 0xeb 'ë' */ + 0x0e, /* 00001110 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x3e, /* 00111110 */ + 0x66, /* 01100110 */ + 0x66, /* 01100110 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + + /* 236 0xec 'ì' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 237 0xed 'í' */ + 0x06, /* 00000110 */ + 0x0c, /* 00001100 */ + 0x7e, /* 01111110 */ + 0xdb, /* 11011011 */ + 0xdb, /* 11011011 */ + 0x7e, /* 01111110 */ + 0x60, /* 01100000 */ + 0xc0, /* 11000000 */ + + /* 238 0xee 'î' */ + 0x1e, /* 00011110 */ + 0x30, /* 00110000 */ + 0x60, /* 01100000 */ + 0x7e, /* 01111110 */ + 0x60, /* 01100000 */ + 0x30, /* 00110000 */ + 0x1e, /* 00011110 */ + 0x00, /* 00000000 */ + + /* 239 0xef 'ï' */ + 0x00, /* 00000000 */ + 0x7c, /* 01111100 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0xc6, /* 11000110 */ + 0x00, /* 00000000 */ + + /* 240 0xf0 'ð' */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0xfe, /* 11111110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 241 0xf1 'ñ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x7e, /* 01111110 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* 242 0xf2 'ò' */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* 243 0xf3 'ó' */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x18, /* 00011000 */ + 0x0c, /* 00001100 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + + /* 244 0xf4 'ô' */ + 0x0e, /* 00001110 */ + 0x1b, /* 00011011 */ + 0x1b, /* 00011011 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + + /* 245 0xf5 'õ' */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0xd8, /* 11011000 */ + 0xd8, /* 11011000 */ + 0x70, /* 01110000 */ + + /* 246 0xf6 'ö' */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x7e, /* 01111110 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 247 0xf7 '÷' */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0x76, /* 01110110 */ + 0xdc, /* 11011100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 248 0xf8 'ø' */ + 0x38, /* 00111000 */ + 0x6c, /* 01101100 */ + 0x6c, /* 01101100 */ + 0x38, /* 00111000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 249 0xf9 'ù' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 250 0xfa 'ú' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x18, /* 00011000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 251 0xfb 'û' */ + 0x0f, /* 00001111 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0x0c, /* 00001100 */ + 0xec, /* 11101100 */ + 0x6c, /* 01101100 */ + 0x3c, /* 00111100 */ + 0x1c, /* 00011100 */ + + /* 252 0xfc 'ü' */ + 0x6c, /* 01101100 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x36, /* 00110110 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 253 0xfd 'ý' */ + 0x78, /* 01111000 */ + 0x0c, /* 00001100 */ + 0x18, /* 00011000 */ + 0x30, /* 00110000 */ + 0x7c, /* 01111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 254 0xfe 'þ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x3c, /* 00111100 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + + /* 255 0xff 'ÿ' */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + 0x00, /* 00000000 */ + +}; + +struct fbcon_font_desc font_pearl_8x8 = { + PEARL8x8_IDX, + "PEARL8x8", + 8, + 8, + fontdata_pearl8x8, + 2 +}; diff -u --recursive --new-file v2.1.110/linux/drivers/video/font_sun12x22.c linux/drivers/video/font_sun12x22.c --- v2.1.110/linux/drivers/video/font_sun12x22.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/font_sun12x22.c Tue Jul 21 10:28:24 1998 @@ -1,11 +1,8 @@ -#define FONTDATAMAX 5632 - -char fontname_sun12x22[] = "SUN12x22"; +#include "font.h" -int fontheight_sun12x22 = 22; -int fontwidth_sun12x22 = 12; +#define FONTDATAMAX 5632 -unsigned short fontdata_sun12x22[FONTDATAMAX] = { +static unsigned short fontdata_sun12x22[FONTDATAMAX] = { /* 0 0x00 '^@' */ 0x0000, /* 000000000000 */ @@ -6208,3 +6205,16 @@ }; + +struct fbcon_font_desc font_sun_12x22 = { + SUN12x22_IDX, + "SUN12x22", + 12, + 22, + fontdata_sun12x22, +#ifdef __sparc__ + 5 +#else + -1 +#endif +}; diff -u --recursive --new-file v2.1.110/linux/drivers/video/font_sun8x16.c linux/drivers/video/font_sun8x16.c --- v2.1.110/linux/drivers/video/font_sun8x16.c Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/font_sun8x16.c Tue Jul 21 10:28:24 1998 @@ -1,11 +1,8 @@ -#define FONTDATAMAX 4096 - -char fontname_sun8x16[] = "SUN8x16"; +#include "font.h" -int fontheight_sun8x16 = 16; -int fontwidth_sun8x16 = 8; +#define FONTDATAMAX 4096 -unsigned char fontdata_sun8x16[FONTDATAMAX] = { +static unsigned char fontdata_sun8x16[FONTDATAMAX] = { /* */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* */ 0x00,0x00,0x7e,0x81,0xa5,0x81,0x81,0xbd,0x99,0x81,0x81,0x7e,0x00,0x00,0x00,0x00, /* */ 0x00,0x00,0x7e,0xff,0xdb,0xff,0xff,0xc3,0xe7,0xff,0xff,0x7e,0x00,0x00,0x00,0x00, @@ -262,4 +259,17 @@ /* */ 0x00,0x70,0xd8,0x30,0x60,0xc8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* */ 0x00,0x00,0x00,0x00,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x00,0x00,0x00,0x00,0x00, /* */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +}; + +struct fbcon_font_desc font_sun_8x16 = { + SUN8x16_IDX, + "SUN8x16", + 8, + 16, + fontdata_sun8x16, +#ifdef __sparc__ + 10 +#else + -1 +#endif }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/fonts.c linux/drivers/video/fonts.c --- v2.1.110/linux/drivers/video/fonts.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/fonts.c Tue Jul 21 10:28:24 1998 @@ -2,6 +2,7 @@ * linux/drivers/video/fonts.c -- `Soft' font definitions * * Created 1995 by Geert Uytterhoeven + * Rewritten 1998 by Martin Mares * * 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 @@ -17,99 +18,61 @@ #endif #include "font.h" +#define NO_FONTS - /* - * External Font Definitions - */ - -/* VGA8x8 */ -extern char fontname_8x8[]; -extern int fontwidth_8x8, fontheight_8x8; -extern u8 fontdata_8x8[]; - -/* VGA8x16 */ -extern char fontname_8x16[]; -extern int fontwidth_8x16, fontheight_8x16; -extern u8 fontdata_8x16[]; - -/* PEARL8x8 */ -extern char fontname_pearl8x8[]; -extern int fontwidth_pearl8x8, fontheight_pearl8x8; -extern u8 fontdata_pearl8x8[]; - -/* VGA6x11 */ -extern char fontname_6x11[]; -extern int fontwidth_6x11, fontheight_6x11; -extern u8 fontdata_6x11[]; - -/* SUN8x16 */ -extern char fontname_sun8x16[]; -extern int fontwidth_sun8x16, fontheight_sun8x16; -extern u8 fontdata_sun8x16[]; - -/* SUN12x22 */ -extern char fontname_sun12x22[]; -extern int fontwidth_sun12x22, fontheight_sun12x22; -extern u8 fontdata_sun12x22[]; - - - - /* - * Font Descriptor Array - */ - -struct softfontdesc { - int idx; - char *name; - int *width; - int *height; - u8 *data; -}; - -#define VGA8x8_IDX 0 -#define VGA8x16_IDX 1 -#define PEARL8x8_IDX 2 -#define VGA6x11_IDX 3 -#define SUN8x16_IDX 4 -#define SUN12x22_IDX 5 - -static struct softfontdesc softfonts[] = { - { VGA8x8_IDX, fontname_8x8, &fontwidth_8x8, &fontheight_8x8, fontdata_8x8 }, -#ifndef __sparc__ - { VGA8x16_IDX, fontname_8x16, &fontwidth_8x16, &fontheight_8x16, fontdata_8x16 }, - { PEARL8x8_IDX, fontname_pearl8x8, &fontwidth_pearl8x8, &fontheight_pearl8x8, - fontdata_pearl8x8 }, - { VGA6x11_IDX, fontname_6x11, &fontwidth_6x11, &fontheight_6x11, fontdata_6x11 }, -#else - { SUN8x16_IDX, fontname_sun8x16, &fontwidth_sun8x16, &fontheight_sun8x16, - fontdata_sun8x16 }, - { SUN12x22_IDX, fontname_sun12x22, &fontwidth_sun12x22, &fontheight_sun12x22, - fontdata_sun12x22 }, +static struct fbcon_font_desc *fbcon_fonts[] = { +#ifdef CONFIG_FONT_8x8 +#undef NO_FONTS + &font_vga_8x8, +#endif +#ifdef CONFIG_FONT_8x16 +#undef NO_FONTS + &font_vga_8x16, +#endif +#ifdef CONFIG_FONT_6x11 +#if !defined(CONFIG_MAC) && !defined(CONFIG_FB_SBUS) +#undef NO_FONTS +#endif + &font_vga_6x11, +#endif +#ifdef CONFIG_FONT_SUN8x16 +#undef NO_FONTS + &font_sun_8x16, +#endif +#ifdef CONFIG_FONT_SUN12x22 +#if !defined(CONFIG_FB_SBUS) && !defined(CONFIG_FBCON_CFB8) +#undef NO_FONTS +#endif + &font_sun_12x22, +#endif +#ifdef CONFIG_FONT_ACORN_8x8 +#undef NO_FONTS + &font_acorn_8x8, +#endif +#ifdef CONFIG_FONT_PEARL_8x8 +#undef NO_FONTS + &font_pearl_8x8, #endif }; -static unsigned int numsoftfonts = sizeof(softfonts)/sizeof(*softfonts); +#define num_fonts (sizeof(fbcon_fonts)/sizeof(*fbcon_fonts)) +#ifdef NO_FONTS +#error No fonts configured. +#endif /* * Find a font with a specific name */ -int findsoftfont(char *name, unsigned short *width, unsigned short *height, u8 *data[]) +struct fbcon_font_desc *fbcon_find_font(char *name) { unsigned int i; - for (i = 0; i < numsoftfonts; i++) - if (!strcmp(softfonts[i].name, name)) { - if (width) - *width = *softfonts[i].width; - if (height) - *height = *softfonts[i].height; - if (data) - *data = softfonts[i].data; - return(1); - } - return(0); + for (i = 0; i < num_fonts; i++) + if (!strcmp(fbcon_fonts[i]->name, name)) + return fbcon_fonts[i]; + return NULL; } @@ -117,44 +80,32 @@ * Get the default font for a specific screen size */ -void getdefaultfont(int xres, int yres, char *name[], unsigned short *width, unsigned short *height, - u8 *data[]) +struct fbcon_font_desc *fbcon_get_default_font(int xres, int yres) { - int i, j; - - if (yres < 400) { - i = VGA8x8_IDX; -#ifdef CONFIG_AMIGA - if (MACH_IS_AMIGA) - i = PEARL8x8_IDX; -#endif - } else - i = VGA8x16_IDX; - -#if defined(CONFIG_MAC) - if (MACH_IS_MAC) { -#if 0 /* MSch: removed until 6x11 is debugged */ - i = VGA6x11_IDX; /* I added this for fun ... I like 6x11 */ -#endif - if (xres < 640) - i = VGA6x11_IDX; - } -#endif + int i, c, cc; + struct fbcon_font_desc *f, *g; -#ifdef __sparc__ - i = SUN8x16_IDX; -#endif - - for (j = 0; j < numsoftfonts; j++) - if (softfonts[j].idx == i) - break; - - if (name) - *name = softfonts[j].name; - if (width) - *width = *softfonts[j].width; - if (height) - *height = *softfonts[j].height; - if (data) - *data = softfonts[j].data; + g = NULL; + cc = -10000; + for(i=0; ipref; +#ifdef __mc68000__ +#ifdef CONFIG_FONT_PEARL_8x8 + if (MACH_IS_AMIGA && f->idx == PEARL8x8_IDX) + c = 100; +#endif +#ifdef CONFIG_FONT_6x11 + if (MACH_IS_MAC && xres < 640 && f->idx == VGA6x11_IDX) + c = 100; +#endif +#endif + if ((yres < 400) == (f->height <= 8)) + c += 1000; + if (c > cc) { + cc = c; + g = f; + } + } + return g; } diff -u --recursive --new-file v2.1.110/linux/drivers/video/macfb.c linux/drivers/video/macfb.c --- v2.1.110/linux/drivers/video/macfb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/macfb.c Tue Jul 21 10:28:24 1998 @@ -43,7 +43,7 @@ {0,0,0}, /* transparency */ 0, /* standard pixel format */ FB_ACTIVATE_NOW, - 274,195, /* 14" monitor - the late Mikael Nykvist's anyway */ + 274,195, /* 14" monitor *Mikael Nykvist's anyway* */ 0, /* The only way to accelerate a mac is .. */ 0L,0L,0L,0L,0L, 0L,0L,0, /* No sync info */ @@ -217,22 +217,22 @@ display->inverse = inverse; switch (mac_depth) { -#ifdef CONFIG_FBCON_MFB +#ifdef FBCON_HAS_MFB case 1: display->dispsw = &fbcon_mfb; break; #endif -#ifdef CONFIG_FBCON_CFB2 +#ifdef FBCON_HAS_CFB2 case 2: display->dispsw = &fbcon_cfb2; break; #endif -#ifdef CONFIG_FBCON_CFB4 +#ifdef FBCON_HAS_CFB4 case 4: display->dispsw = &fbcon_cfb4; break; #endif -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 case 8: display->dispsw = &fbcon_cfb8; break; diff -u --recursive --new-file v2.1.110/linux/drivers/video/macmodes.c linux/drivers/video/macmodes.c --- v2.1.110/linux/drivers/video/macmodes.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/macmodes.c Tue Jul 21 10:28:24 1998 @@ -9,43 +9,12 @@ */ +#include #include #include #include -#include - - - /* - * Video mode values. - * These are supposed to be the same as the values that Apple uses in - * MacOS. - */ - -#define VMODE_512_384_60I 1 /* 512x384, 60Hz interlaced (NTSC) */ -#define VMODE_512_384_60 2 /* 512x384, 60Hz */ -#define VMODE_640_480_50I 3 /* 640x480, 50Hz interlaced (PAL) */ -#define VMODE_640_480_60I 4 /* 640x480, 60Hz interlaced (NTSC) */ -#define VMODE_640_480_60 5 /* 640x480, 60Hz (VGA) */ -#define VMODE_640_480_67 6 /* 640x480, 67Hz */ -#define VMODE_640_870_75P 7 /* 640x870, 75Hz (portrait) */ -#define VMODE_768_576_50I 8 /* 768x576, 50Hz (PAL full frame) */ -#define VMODE_800_600_56 9 /* 800x600, 56Hz */ -#define VMODE_800_600_60 10 /* 800x600, 60Hz */ -#define VMODE_800_600_72 11 /* 800x600, 72Hz */ -#define VMODE_800_600_75 12 /* 800x600, 75Hz */ -#define VMODE_832_624_75 13 /* 832x624, 75Hz */ -#define VMODE_1024_768_60 14 /* 1024x768, 60Hz */ -#define VMODE_1024_768_70 15 /* 1024x768, 70Hz (or 72Hz?) */ -#define VMODE_1024_768_75V 16 /* 1024x768, 75Hz (VESA) */ -#define VMODE_1024_768_75 17 /* 1024x768, 75Hz */ -#define VMODE_1152_870_75 18 /* 1152x870, 75Hz */ -#define VMODE_1280_960_75 19 /* 1280x960, 75Hz */ -#define VMODE_1280_1024_75 20 /* 1280x1024, 75Hz */ - -#define CMODE_8 0 /* 8 bits/pixel */ -#define CMODE_16 1 /* 16 (actually 15) bits/pixel */ -#define CMODE_32 2 /* 32 (actually 24) bits/pixel */ +#include "macmodes.h" struct mac_mode { int number; diff -u --recursive --new-file v2.1.110/linux/drivers/video/macmodes.h linux/drivers/video/macmodes.h --- v2.1.110/linux/drivers/video/macmodes.h Wed Dec 31 16:00:00 1969 +++ linux/drivers/video/macmodes.h Tue Jul 21 10:28:24 1998 @@ -0,0 +1,52 @@ +/* + * linux/drivers/video/macmodes.h -- Standard MacOS video modes + * + * Copyright (C) 1998 Geert Uytterhoeven + * + * 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. + */ + + + /* + * Video mode values. + * These are supposed to be the same as the values that Apple uses in + * MacOS. + */ + +#define VMODE_NVRAM 0 +#define VMODE_512_384_60I 1 /* 512x384, 60Hz interlaced (NTSC) */ +#define VMODE_512_384_60 2 /* 512x384, 60Hz */ +#define VMODE_640_480_50I 3 /* 640x480, 50Hz interlaced (PAL) */ +#define VMODE_640_480_60I 4 /* 640x480, 60Hz interlaced (NTSC) */ +#define VMODE_640_480_60 5 /* 640x480, 60Hz (VGA) */ +#define VMODE_640_480_67 6 /* 640x480, 67Hz */ +#define VMODE_640_870_75P 7 /* 640x870, 75Hz (portrait) */ +#define VMODE_768_576_50I 8 /* 768x576, 50Hz (PAL full frame) */ +#define VMODE_800_600_56 9 /* 800x600, 56Hz */ +#define VMODE_800_600_60 10 /* 800x600, 60Hz */ +#define VMODE_800_600_72 11 /* 800x600, 72Hz */ +#define VMODE_800_600_75 12 /* 800x600, 75Hz */ +#define VMODE_832_624_75 13 /* 832x624, 75Hz */ +#define VMODE_1024_768_60 14 /* 1024x768, 60Hz */ +#define VMODE_1024_768_70 15 /* 1024x768, 70Hz (or 72Hz?) */ +#define VMODE_1024_768_75V 16 /* 1024x768, 75Hz (VESA) */ +#define VMODE_1024_768_75 17 /* 1024x768, 75Hz */ +#define VMODE_1152_870_75 18 /* 1152x870, 75Hz */ +#define VMODE_1280_960_75 19 /* 1280x960, 75Hz */ +#define VMODE_1280_1024_75 20 /* 1280x1024, 75Hz */ +#define VMODE_MAX 20 +#define VMODE_CHOOSE 99 + +#define CMODE_NVRAM -1 +#define CMODE_8 0 /* 8 bits/pixel */ +#define CMODE_16 1 /* 16 (actually 15) bits/pixel */ +#define CMODE_32 2 /* 32 (actually 24) bits/pixel */ + + +extern int mac_vmode_to_var(int vmode, int cmode, + struct fb_var_screeninfo *var); +extern int mac_var_to_vmode(const struct fb_var_screeninfo *var, int *vmode, + int *cmode); +extern int mac_map_monitor_sense(int sense); diff -u --recursive --new-file v2.1.110/linux/drivers/video/mdafb.c linux/drivers/video/mdafb.c --- v2.1.110/linux/drivers/video/mdafb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/mdafb.c Tue Jul 21 10:28:24 1998 @@ -286,7 +286,8 @@ static struct display_switch fbcon_mdafb = { fbcon_vga_setup, fbcon_vga_bmove, fbcon_vga_clear, fbcon_vga_putc, - fbcon_vga_putcs, fbcon_vga_revc, fbcon_mdafb_cursor, NULL, FONTWIDTH(8) + fbcon_vga_putcs, fbcon_vga_revc, fbcon_mdafb_cursor, NULL, NULL, + FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/offb.c linux/drivers/video/offb.c --- v2.1.110/linux/drivers/video/offb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/offb.c Tue Jul 21 10:28:24 1998 @@ -34,6 +34,7 @@ #include "fbcon.h" #include "fbcon-cfb8.h" +#include "macmodes.h" static int currcon = 0; @@ -406,7 +407,7 @@ disp->line_length = fix->line_length; disp->can_soft_blank = info->cmap_adr ? 1 : 0; disp->inverse = 0; -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 disp->dispsw = &fbcon_cfb8; #else disp->dispsw = NULL; diff -u --recursive --new-file v2.1.110/linux/drivers/video/pearl_8x8.c linux/drivers/video/pearl_8x8.c --- v2.1.110/linux/drivers/video/pearl_8x8.c Tue Sep 16 02:30:10 1997 +++ linux/drivers/video/pearl_8x8.c Wed Dec 31 16:00:00 1969 @@ -1,2582 +0,0 @@ -/**********************************************/ -/* */ -/* Font file generated by cpi2fnt */ -/* ------------------------------ */ -/* Combined with the alpha-numeric */ -/* portion of Greg Harp's old PEARL */ -/* font (from earlier versions of */ -/* linux-m86k) by John Shifflett */ -/* */ -/**********************************************/ - -#define FONTDATAMAX 2048 - -char fontname_pearl8x8[] = "PEARL8x8"; - -int fontheight_pearl8x8 = 8; -int fontwidth_pearl8x8 = 8; - -unsigned char fontdata_pearl8x8[FONTDATAMAX] = { - - /* 0 0x00 '^@' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 1 0x01 '^A' */ - 0x7e, /* 01111110 */ - 0x81, /* 10000001 */ - 0xa5, /* 10100101 */ - 0x81, /* 10000001 */ - 0xbd, /* 10111101 */ - 0x99, /* 10011001 */ - 0x81, /* 10000001 */ - 0x7e, /* 01111110 */ - - /* 2 0x02 '^B' */ - 0x7e, /* 01111110 */ - 0xff, /* 11111111 */ - 0xdb, /* 11011011 */ - 0xff, /* 11111111 */ - 0xc3, /* 11000011 */ - 0xe7, /* 11100111 */ - 0xff, /* 11111111 */ - 0x7e, /* 01111110 */ - - /* 3 0x03 '^C' */ - 0x6c, /* 01101100 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - - /* 4 0x04 '^D' */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x7c, /* 01111100 */ - 0xfe, /* 11111110 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0x10, /* 00010000 */ - 0x00, /* 00000000 */ - - /* 5 0x05 '^E' */ - 0x38, /* 00111000 */ - 0x7c, /* 01111100 */ - 0x38, /* 00111000 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0xd6, /* 11010110 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - - /* 6 0x06 '^F' */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x7c, /* 01111100 */ - 0xfe, /* 11111110 */ - 0xfe, /* 11111110 */ - 0x7c, /* 01111100 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - - /* 7 0x07 '^G' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 8 0x08 '^H' */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xe7, /* 11100111 */ - 0xc3, /* 11000011 */ - 0xc3, /* 11000011 */ - 0xe7, /* 11100111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - - /* 9 0x09 '^I' */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x42, /* 01000010 */ - 0x42, /* 01000010 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 10 0x0a '^J' */ - 0xff, /* 11111111 */ - 0xc3, /* 11000011 */ - 0x99, /* 10011001 */ - 0xbd, /* 10111101 */ - 0xbd, /* 10111101 */ - 0x99, /* 10011001 */ - 0xc3, /* 11000011 */ - 0xff, /* 11111111 */ - - /* 11 0x0b '^K' */ - 0x0f, /* 00001111 */ - 0x07, /* 00000111 */ - 0x0f, /* 00001111 */ - 0x7d, /* 01111101 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x78, /* 01111000 */ - - /* 12 0x0c '^L' */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - - /* 13 0x0d '^M' */ - 0x3f, /* 00111111 */ - 0x33, /* 00110011 */ - 0x3f, /* 00111111 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x70, /* 01110000 */ - 0xf0, /* 11110000 */ - 0xe0, /* 11100000 */ - - /* 14 0x0e '^N' */ - 0x7f, /* 01111111 */ - 0x63, /* 01100011 */ - 0x7f, /* 01111111 */ - 0x63, /* 01100011 */ - 0x63, /* 01100011 */ - 0x67, /* 01100111 */ - 0xe6, /* 11100110 */ - 0xc0, /* 11000000 */ - - /* 15 0x0f '^O' */ - 0x18, /* 00011000 */ - 0xdb, /* 11011011 */ - 0x3c, /* 00111100 */ - 0xe7, /* 11100111 */ - 0xe7, /* 11100111 */ - 0x3c, /* 00111100 */ - 0xdb, /* 11011011 */ - 0x18, /* 00011000 */ - - /* 16 0x10 '^P' */ - 0x80, /* 10000000 */ - 0xe0, /* 11100000 */ - 0xf8, /* 11111000 */ - 0xfe, /* 11111110 */ - 0xf8, /* 11111000 */ - 0xe0, /* 11100000 */ - 0x80, /* 10000000 */ - 0x00, /* 00000000 */ - - /* 17 0x11 '^Q' */ - 0x02, /* 00000010 */ - 0x0e, /* 00001110 */ - 0x3e, /* 00111110 */ - 0xfe, /* 11111110 */ - 0x3e, /* 00111110 */ - 0x0e, /* 00001110 */ - 0x02, /* 00000010 */ - 0x00, /* 00000000 */ - - /* 18 0x12 '^R' */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - - /* 19 0x13 '^S' */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - - /* 20 0x14 '^T' */ - 0x7f, /* 01111111 */ - 0xdb, /* 11011011 */ - 0xdb, /* 11011011 */ - 0x7b, /* 01111011 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x00, /* 00000000 */ - - /* 21 0x15 '^U' */ - 0x3e, /* 00111110 */ - 0x61, /* 01100001 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x86, /* 10000110 */ - 0x7c, /* 01111100 */ - - /* 22 0x16 '^V' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 23 0x17 '^W' */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - - /* 24 0x18 '^X' */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 25 0x19 '^Y' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 26 0x1a '^Z' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0xfe, /* 11111110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 27 0x1b '^[' */ - 0x00, /* 00000000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xfe, /* 11111110 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 28 0x1c '^\' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 29 0x1d '^]' */ - 0x00, /* 00000000 */ - 0x24, /* 00100100 */ - 0x66, /* 01100110 */ - 0xff, /* 11111111 */ - 0x66, /* 01100110 */ - 0x24, /* 00100100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 30 0x1e '^^' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 31 0x1f '^_' */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0x7e, /* 01111110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 32 0x20 ' ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 33 0x21 '!' */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 34 0x22 '"' */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 35 0x23 '#' */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - - /* 36 0x24 '$' */ - 0x18, /* 00011000 */ - 0x3e, /* 00111110 */ - 0x60, /* 01100000 */ - 0x3c, /* 00111100 */ - 0x06, /* 00000110 */ - 0x7c, /* 01111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 37 0x25 '%' */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xcc, /* 11001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x66, /* 01100110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 38 0x26 '&' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x68, /* 01101000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 39 0x27 ''' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 40 0x28 '(' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - - /* 41 0x29 ')' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - - /* 42 0x2a '*' */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0xff, /* 11111111 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 43 0x2b '+' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 44 0x2c ',' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - - /* 45 0x2d '-' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 46 0x2e '.' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 47 0x2f '/' */ - 0x03, /* 00000011 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - - /* 48 0x30 '0' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xde, /* 11011110 */ - 0xfe, /* 11111110 */ - 0xf6, /* 11110110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 49 0x31 '1' */ - 0x18, /* 00011000 */ - 0x78, /* 01111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 50 0x32 '2' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 51 0x33 '3' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0x06, /* 00000110 */ - 0x1c, /* 00011100 */ - 0x06, /* 00000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 52 0x34 '4' */ - 0x1c, /* 00011100 */ - 0x3c, /* 00111100 */ - 0x6c, /* 01101100 */ - 0xcc, /* 11001100 */ - 0xfe, /* 11111110 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - - /* 53 0x35 '5' */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xfc, /* 11111100 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 54 0x36 '6' */ - 0x38, /* 00111000 */ - 0x60, /* 01100000 */ - 0xc0, /* 11000000 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 55 0x37 '7' */ - 0xfe, /* 11111110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x00, /* 00000000 */ - - /* 56 0x38 '8' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 57 0x39 '9' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - - /* 58 0x3a ':' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 59 0x3b ';' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - - /* 60 0x3c '<' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - - /* 61 0x3d '=' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 62 0x3e '>' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - - /* 63 0x3f '?' */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 64 0x40 '@' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xde, /* 11011110 */ - 0xde, /* 11011110 */ - 0xde, /* 11011110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 65 0x41 'A' */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 66 0x42 'B' */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0x00, /* 00000000 */ - - /* 67 0x43 'C' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 68 0x44 'D' */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0x00, /* 00000000 */ - - /* 69 0x45 'E' */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xf8, /* 11111000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 70 0x46 'F' */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xf8, /* 11111000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - - /* 71 0x47 'G' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xce, /* 11001110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 72 0x48 'H' */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 73 0x49 'I' */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 74 0x4a 'J' */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 75 0x4b 'K' */ - 0xc6, /* 11000110 */ - 0xcc, /* 11001100 */ - 0xd8, /* 11011000 */ - 0xf0, /* 11110000 */ - 0xd8, /* 11011000 */ - 0xcc, /* 11001100 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 76 0x4c 'L' */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 77 0x4d 'M' */ - 0x82, /* 10000010 */ - 0xc6, /* 11000110 */ - 0xee, /* 11101110 */ - 0xfe, /* 11111110 */ - 0xd6, /* 11010110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 78 0x4e 'N' */ - 0xc6, /* 11000110 */ - 0xe6, /* 11100110 */ - 0xf6, /* 11110110 */ - 0xde, /* 11011110 */ - 0xce, /* 11001110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 79 0x4f 'O' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 80 0x50 'P' */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - - /* 81 0x51 'Q' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xf6, /* 11110110 */ - 0xde, /* 11011110 */ - 0x7c, /* 01111100 */ - 0x06, /* 00000110 */ - - /* 82 0x52 'R' */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0xd8, /* 11011000 */ - 0xcc, /* 11001100 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 83 0x53 'S' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0x60, /* 01100000 */ - 0x38, /* 00111000 */ - 0x0c, /* 00001100 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 84 0x54 'T' */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 85 0x55 'U' */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 86 0x56 'V' */ - 0xc3, /* 11000011 */ - 0xc3, /* 11000011 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 87 0x57 'W' */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xd6, /* 11010110 */ - 0xfe, /* 11111110 */ - 0xee, /* 11101110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 88 0x58 'X' */ - 0xc3, /* 11000011 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0xc3, /* 11000011 */ - 0x00, /* 00000000 */ - - /* 89 0x59 'Y' */ - 0xc3, /* 11000011 */ - 0xc3, /* 11000011 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 90 0x5a 'Z' */ - 0xfe, /* 11111110 */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 91 0x5b '[' */ - 0x3c, /* 00111100 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 92 0x5c '\' */ - 0xc0, /* 11000000 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x06, /* 00000110 */ - 0x03, /* 00000011 */ - 0x00, /* 00000000 */ - - /* 93 0x5d ']' */ - 0x3c, /* 00111100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 94 0x5e '^' */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 95 0x5f '_' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - - /* 96 0x60 '`' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 97 0x61 'a' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0x06, /* 00000110 */ - 0x7e, /* 01111110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 98 0x62 'b' */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0x00, /* 00000000 */ - - /* 99 0x63 'c' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 100 0x64 'd' */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x7e, /* 01111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 101 0x65 'e' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 102 0x66 'f' */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x60, /* 01100000 */ - 0xf0, /* 11110000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x60, /* 01100000 */ - 0x00, /* 00000000 */ - - /* 103 0x67 'g' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x06, /* 00000110 */ - 0x7c, /* 01111100 */ - - /* 104 0x68 'h' */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 105 0x69 'i' */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 106 0x6a 'j' */ - 0x06, /* 00000110 */ - 0x00, /* 00000000 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - - /* 107 0x6b 'k' */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xcc, /* 11001100 */ - 0xd8, /* 11011000 */ - 0xf0, /* 11110000 */ - 0xd8, /* 11011000 */ - 0xcc, /* 11001100 */ - 0x00, /* 00000000 */ - - /* 108 0x6c 'l' */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 109 0x6d 'm' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xec, /* 11101100 */ - 0xfe, /* 11111110 */ - 0xd6, /* 11010110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 110 0x6e 'n' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 111 0x6f 'o' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 112 0x70 'p' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfc, /* 11111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfc, /* 11111100 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - - /* 113 0x71 'q' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - - /* 114 0x72 'r' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xdc, /* 11011100 */ - 0xe6, /* 11100110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - - /* 115 0x73 's' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x06, /* 00000110 */ - 0xfc, /* 11111100 */ - 0x00, /* 00000000 */ - - /* 116 0x74 't' */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x7c, /* 01111100 */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x36, /* 00110110 */ - 0x1c, /* 00011100 */ - 0x00, /* 00000000 */ - - /* 117 0x75 'u' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 118 0x76 'v' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - - /* 119 0x77 'w' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xd6, /* 11010110 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - - /* 120 0x78 'x' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 121 0x79 'y' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xc3, /* 11000011 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - - /* 122 0x7a 'z' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x0c, /* 00001100 */ - 0x38, /* 00111000 */ - 0x60, /* 01100000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 123 0x7b '{' */ - 0x0e, /* 00001110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x70, /* 01110000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x0e, /* 00001110 */ - 0x00, /* 00000000 */ - - /* 124 0x7c '|' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 125 0x7d '}' */ - 0x70, /* 01110000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x0e, /* 00001110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - - /* 126 0x7e '~' */ - 0x72, /* 01110010 */ - 0x9c, /* 10011100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 127 0x7f '' */ - 0x00, /* 00000000 */ - 0x10, /* 00010000 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 128 0x80 '€' */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x0c, /* 00001100 */ - 0x78, /* 01111000 */ - - /* 129 0x81 '' */ - 0xcc, /* 11001100 */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 130 0x82 '‚' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 131 0x83 'ƒ' */ - 0x7c, /* 01111100 */ - 0x82, /* 10000010 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 132 0x84 '„' */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 133 0x85 '…' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 134 0x86 '†' */ - 0x30, /* 00110000 */ - 0x30, /* 00110000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 135 0x87 '‡' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x7e, /* 01111110 */ - 0x0c, /* 00001100 */ - 0x38, /* 00111000 */ - - /* 136 0x88 'ˆ' */ - 0x7c, /* 01111100 */ - 0x82, /* 10000010 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 137 0x89 '‰' */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 138 0x8a 'Š' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 139 0x8b '‹' */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 140 0x8c 'Œ' */ - 0x7c, /* 01111100 */ - 0x82, /* 10000010 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 141 0x8d '' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 142 0x8e 'Ž' */ - 0xc6, /* 11000110 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 143 0x8f '' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 144 0x90 '' */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xf8, /* 11111000 */ - 0xc0, /* 11000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 145 0x91 '‘' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0xd8, /* 11011000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 146 0x92 '’' */ - 0x3e, /* 00111110 */ - 0x6c, /* 01101100 */ - 0xcc, /* 11001100 */ - 0xfe, /* 11111110 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xce, /* 11001110 */ - 0x00, /* 00000000 */ - - /* 147 0x93 '“' */ - 0x7c, /* 01111100 */ - 0x82, /* 10000010 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 148 0x94 '”' */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 149 0x95 '•' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 150 0x96 '–' */ - 0x78, /* 01111000 */ - 0x84, /* 10000100 */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 151 0x97 '—' */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 152 0x98 '˜' */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7e, /* 01111110 */ - 0x06, /* 00000110 */ - 0xfc, /* 11111100 */ - - /* 153 0x99 '™' */ - 0xc6, /* 11000110 */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - - /* 154 0x9a 'š' */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 155 0x9b '›' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 156 0x9c 'œ' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x64, /* 01100100 */ - 0xf0, /* 11110000 */ - 0x60, /* 01100000 */ - 0x66, /* 01100110 */ - 0xfc, /* 11111100 */ - 0x00, /* 00000000 */ - - /* 157 0x9d '' */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 158 0x9e 'ž' */ - 0xf8, /* 11111000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xfa, /* 11111010 */ - 0xc6, /* 11000110 */ - 0xcf, /* 11001111 */ - 0xc6, /* 11000110 */ - 0xc7, /* 11000111 */ - - /* 159 0x9f 'Ÿ' */ - 0x0e, /* 00001110 */ - 0x1b, /* 00011011 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0xd8, /* 11011000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - - /* 160 0xa0 ' ' */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x7c, /* 01111100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 161 0xa1 '¡' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x38, /* 00111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 162 0xa2 '¢' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - - /* 163 0xa3 '£' */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 164 0xa4 '¤' */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0xdc, /* 11011100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x00, /* 00000000 */ - - /* 165 0xa5 '¥' */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0xe6, /* 11100110 */ - 0xf6, /* 11110110 */ - 0xde, /* 11011110 */ - 0xce, /* 11001110 */ - 0x00, /* 00000000 */ - - /* 166 0xa6 '¦' */ - 0x3c, /* 00111100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x3e, /* 00111110 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 167 0xa7 '§' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 168 0xa8 '¨' */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x63, /* 01100011 */ - 0x3e, /* 00111110 */ - 0x00, /* 00000000 */ - - /* 169 0xa9 '©' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 170 0xaa 'ª' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x06, /* 00000110 */ - 0x06, /* 00000110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 171 0xab '«' */ - 0x63, /* 01100011 */ - 0xe6, /* 11100110 */ - 0x6c, /* 01101100 */ - 0x7e, /* 01111110 */ - 0x33, /* 00110011 */ - 0x66, /* 01100110 */ - 0xcc, /* 11001100 */ - 0x0f, /* 00001111 */ - - /* 172 0xac '¬' */ - 0x63, /* 01100011 */ - 0xe6, /* 11100110 */ - 0x6c, /* 01101100 */ - 0x7a, /* 01111010 */ - 0x36, /* 00110110 */ - 0x6a, /* 01101010 */ - 0xdf, /* 11011111 */ - 0x06, /* 00000110 */ - - /* 173 0xad '­' */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 174 0xae '®' */ - 0x00, /* 00000000 */ - 0x33, /* 00110011 */ - 0x66, /* 01100110 */ - 0xcc, /* 11001100 */ - 0x66, /* 01100110 */ - 0x33, /* 00110011 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 175 0xaf '¯' */ - 0x00, /* 00000000 */ - 0xcc, /* 11001100 */ - 0x66, /* 01100110 */ - 0x33, /* 00110011 */ - 0x66, /* 01100110 */ - 0xcc, /* 11001100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 176 0xb0 '°' */ - 0x22, /* 00100010 */ - 0x88, /* 10001000 */ - 0x22, /* 00100010 */ - 0x88, /* 10001000 */ - 0x22, /* 00100010 */ - 0x88, /* 10001000 */ - 0x22, /* 00100010 */ - 0x88, /* 10001000 */ - - /* 177 0xb1 '±' */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - 0x55, /* 01010101 */ - 0xaa, /* 10101010 */ - - /* 178 0xb2 '²' */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - 0x77, /* 01110111 */ - 0xdd, /* 11011101 */ - - /* 179 0xb3 '³' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 180 0xb4 '´' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 181 0xb5 'µ' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 182 0xb6 '¶' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf6, /* 11110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 183 0xb7 '·' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 184 0xb8 '¸' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 185 0xb9 '¹' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf6, /* 11110110 */ - 0x06, /* 00000110 */ - 0xf6, /* 11110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 186 0xba 'º' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 187 0xbb '»' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x06, /* 00000110 */ - 0xf6, /* 11110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 188 0xbc '¼' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf6, /* 11110110 */ - 0x06, /* 00000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 189 0xbd '½' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 190 0xbe '¾' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 191 0xbf '¿' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xf8, /* 11111000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 192 0xc0 'À' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 193 0xc1 'Á' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 194 0xc2 'Â' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 195 0xc3 'Ã' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 196 0xc4 'Ä' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 197 0xc5 'Å' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 198 0xc6 'Æ' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 199 0xc7 'Ç' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x37, /* 00110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 200 0xc8 'È' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x37, /* 00110111 */ - 0x30, /* 00110000 */ - 0x3f, /* 00111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 201 0xc9 'É' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3f, /* 00111111 */ - 0x30, /* 00110000 */ - 0x37, /* 00110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 202 0xca 'Ê' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf7, /* 11110111 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 203 0xcb 'Ë' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0xf7, /* 11110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 204 0xcc 'Ì' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x37, /* 00110111 */ - 0x30, /* 00110000 */ - 0x37, /* 00110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 205 0xcd 'Í' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 206 0xce 'Î' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xf7, /* 11110111 */ - 0x00, /* 00000000 */ - 0xf7, /* 11110111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 207 0xcf 'Ï' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 208 0xd0 'Ð' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 209 0xd1 'Ñ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 210 0xd2 'Ò' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 211 0xd3 'Ó' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x3f, /* 00111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 212 0xd4 'Ô' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 213 0xd5 'Õ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 214 0xd6 'Ö' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3f, /* 00111111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 215 0xd7 '×' */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0xff, /* 11111111 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - - /* 216 0xd8 'Ø' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0xff, /* 11111111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 217 0xd9 'Ù' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xf8, /* 11111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 218 0xda 'Ú' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x1f, /* 00011111 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 219 0xdb 'Û' */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - - /* 220 0xdc 'Ü' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - - /* 221 0xdd 'Ý' */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - 0xf0, /* 11110000 */ - - /* 222 0xde 'Þ' */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - 0x0f, /* 00001111 */ - - /* 223 0xdf 'ß' */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0xff, /* 11111111 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 224 0xe0 'à' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0xc8, /* 11001000 */ - 0xdc, /* 11011100 */ - 0x76, /* 01110110 */ - 0x00, /* 00000000 */ - - /* 225 0xe1 'á' */ - 0x78, /* 01111000 */ - 0xcc, /* 11001100 */ - 0xcc, /* 11001100 */ - 0xd8, /* 11011000 */ - 0xcc, /* 11001100 */ - 0xc6, /* 11000110 */ - 0xcc, /* 11001100 */ - 0x00, /* 00000000 */ - - /* 226 0xe2 'â' */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0xc0, /* 11000000 */ - 0x00, /* 00000000 */ - - /* 227 0xe3 'ã' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x00, /* 00000000 */ - - /* 228 0xe4 'ä' */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - - /* 229 0xe5 'å' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0x70, /* 01110000 */ - 0x00, /* 00000000 */ - - /* 230 0xe6 'æ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x7c, /* 01111100 */ - 0xc0, /* 11000000 */ - - /* 231 0xe7 'ç' */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - - /* 232 0xe8 'è' */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x3c, /* 00111100 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - - /* 233 0xe9 'é' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xfe, /* 11111110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - - /* 234 0xea 'ê' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0xee, /* 11101110 */ - 0x00, /* 00000000 */ - - /* 235 0xeb 'ë' */ - 0x0e, /* 00001110 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x3e, /* 00111110 */ - 0x66, /* 01100110 */ - 0x66, /* 01100110 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - - /* 236 0xec 'ì' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0xdb, /* 11011011 */ - 0xdb, /* 11011011 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 237 0xed 'í' */ - 0x06, /* 00000110 */ - 0x0c, /* 00001100 */ - 0x7e, /* 01111110 */ - 0xdb, /* 11011011 */ - 0xdb, /* 11011011 */ - 0x7e, /* 01111110 */ - 0x60, /* 01100000 */ - 0xc0, /* 11000000 */ - - /* 238 0xee 'î' */ - 0x1e, /* 00011110 */ - 0x30, /* 00110000 */ - 0x60, /* 01100000 */ - 0x7e, /* 01111110 */ - 0x60, /* 01100000 */ - 0x30, /* 00110000 */ - 0x1e, /* 00011110 */ - 0x00, /* 00000000 */ - - /* 239 0xef 'ï' */ - 0x00, /* 00000000 */ - 0x7c, /* 01111100 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0xc6, /* 11000110 */ - 0x00, /* 00000000 */ - - /* 240 0xf0 'ð' */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0xfe, /* 11111110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 241 0xf1 'ñ' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x7e, /* 01111110 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 242 0xf2 'ò' */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 243 0xf3 'ó' */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x18, /* 00011000 */ - 0x0c, /* 00001100 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - - /* 244 0xf4 'ô' */ - 0x0e, /* 00001110 */ - 0x1b, /* 00011011 */ - 0x1b, /* 00011011 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - - /* 245 0xf5 'õ' */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0xd8, /* 11011000 */ - 0xd8, /* 11011000 */ - 0x70, /* 01110000 */ - - /* 246 0xf6 'ö' */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x7e, /* 01111110 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 247 0xf7 '÷' */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0x76, /* 01110110 */ - 0xdc, /* 11011100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 248 0xf8 'ø' */ - 0x38, /* 00111000 */ - 0x6c, /* 01101100 */ - 0x6c, /* 01101100 */ - 0x38, /* 00111000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 249 0xf9 'ù' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 250 0xfa 'ú' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x18, /* 00011000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 251 0xfb 'û' */ - 0x0f, /* 00001111 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0x0c, /* 00001100 */ - 0xec, /* 11101100 */ - 0x6c, /* 01101100 */ - 0x3c, /* 00111100 */ - 0x1c, /* 00011100 */ - - /* 252 0xfc 'ü' */ - 0x6c, /* 01101100 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x36, /* 00110110 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 253 0xfd 'ý' */ - 0x78, /* 01111000 */ - 0x0c, /* 00001100 */ - 0x18, /* 00011000 */ - 0x30, /* 00110000 */ - 0x7c, /* 01111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 254 0xfe 'þ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x3c, /* 00111100 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - - /* 255 0xff 'ÿ' */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - 0x00, /* 00000000 */ - -}; - diff -u --recursive --new-file v2.1.110/linux/drivers/video/promcon.c linux/drivers/video/promcon.c --- v2.1.110/linux/drivers/video/promcon.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/promcon.c Tue Jul 21 10:28:24 1998 @@ -1,10 +1,11 @@ -/* $Id: promcon.c,v 1.3 1998/07/13 01:06:19 ecd Exp $ +/* $Id: promcon.c,v 1.6 1998/07/19 12:49:26 mj Exp $ * Console driver utilizing PROM sun terminal emulation * * Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be) * Copyright (C) 1998 Jakub Jelinek (jj@ultra.linux.cz) */ +#include #include #include #include @@ -23,6 +24,14 @@ static short pw = 80 - 1, ph = 34 - 1; static short px, py; +#define PROMCON_COLOR 1 + +#if PROMCON_COLOR +#define inverted(s) ((((s) & 0x7700) == 0x0700) ? 0 : 1) +#else +#define inverted(s) (((s) & 0x0800) ? 1 : 0) +#endif + static __inline__ void promcon_puts(char *buf, int cnt) { @@ -38,20 +47,20 @@ if (px == pw) { unsigned short *t = s - 1; - if ((*s & 0x0800) && (*t & 0x0800)) + if (inverted(*s) && inverted(*t)) return sprintf(b, "\b\033[7m%c\b\033[@%c\033[m", *s, *t); - else if (*s & 0x0800) + else if (inverted(*s)) return sprintf(b, "\b\033[7m%c\033[m\b\033[@%c", *s, *t); - else if (*t & 0x0800) + else if (inverted(*t)) return sprintf(b, "\b%c\b\033[@\033[7m%c\033[m", *s, *t); else return sprintf(b, "\b%c\b\033[@%c", *s, *t); } - if (*s & 0x0800) + if (inverted(*s)) return sprintf(b, "\033[7m%c\033[m\b", *s); else return sprintf(b, "%c\b", *s); @@ -69,18 +78,18 @@ if (px == pw) { unsigned short *t = s - 1; - if ((*s & 0x0800) && (*t & 0x0800)) + if (inverted(*s) && inverted(*t)) b += sprintf(b, "\b%c\b\033[@\033[7m%c\033[m", *s, *t); - else if (*s & 0x0800) + else if (inverted(*s)) b += sprintf(b, "\b%c\b\033[@%c", *s, *t); - else if (*t & 0x0800) + else if (inverted(*t)) b += sprintf(b, "\b\033[7m%c\b\033[@%c\033[m", *s, *t); else b += sprintf(b, "\b\033[7m%c\033[m\b\033[@%c", *s, *t); return b - p; } - if (*s & 0x0800) + if (inverted(*s)) b += sprintf(b, "%c\b", *s); else b += sprintf(b, "\033[7m%c\033[m\b", *s); @@ -114,7 +123,7 @@ static void promcon_init(struct vc_data *conp, int init) { - conp->vc_can_do_color = 0; + conp->vc_can_do_color = PROMCON_COLOR; conp->vc_cols = pw + 1; conp->vc_rows = ph + 1; } @@ -129,12 +138,12 @@ promcon_repaint_line(unsigned short *s, unsigned char *buf, unsigned char **bp) { int cnt = pw + 1; - unsigned short attr = 0; + int attr = -1; unsigned char *b = *bp; while (cnt--) { - if (attr != (*s & 0x0800)) { - attr = (*s & 0x0800); + if (attr != inverted(*s)) { + attr = inverted(*s); if (attr) { strcpy (b, "\033[7m"); b += 4; @@ -183,7 +192,7 @@ py = y; } - if (attr & 0x0800) + if (inverted(attr)) b += sprintf(b, "\033[7m%c\033[m", *s++); else b += sprintf(b, "%c", *s++); @@ -191,7 +200,7 @@ strcpy(b, "\b\033[@"); b += 4; - if (save & 0x0800) + if (inverted(save)) b += sprintf(b, "\033[7m%c\033[m", save); else b += sprintf(b, "%c", save); @@ -207,7 +216,7 @@ } } - if (attr & 0x0800) { + if (inverted(attr)) { strcpy(b, "\033[7m"); b += 4; } @@ -234,7 +243,7 @@ px++; } - if (attr & 0x0800) { + if (inverted(attr)) { strcpy(b, "\033[m"); b += 3; } @@ -376,19 +385,13 @@ } static int -promcon_get_font(struct vc_data *conp, int *w, int *h, char *data) +promcon_font_op(struct vc_data *conp, struct console_font_op *op) { return -ENOSYS; } static int -promcon_set_font(struct vc_data *conp, int w, int h, char *data) -{ - return -ENOSYS; -} - -static int -promcon_blank(int blank) +promcon_blank(struct vc_data *conp, int blank) { if (blank) { promcon_puts("\033[H\033[J\033[7m \033[m\b", 15); @@ -503,10 +506,11 @@ con_bmove: promcon_bmove, con_switch: promcon_switch, con_blank: promcon_blank, - con_get_font: promcon_get_font, - con_set_font: promcon_set_font, + con_font_op: promcon_font_op, con_set_palette: DUMMY, con_scrolldelta: DUMMY, con_set_origin: NULL, con_save_screen: NULL, + con_build_attr: NULL, + con_invert_region: NULL, }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/retz3fb.c linux/drivers/video/retz3fb.c --- v2.1.110/linux/drivers/video/retz3fb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/retz3fb.c Tue Jul 21 10:28:24 1998 @@ -290,7 +290,7 @@ * Text console acceleration */ -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 static struct display_switch fbcon_retz3_8; #endif @@ -1280,7 +1280,7 @@ display->can_soft_blank = 1; display->inverse = z3fb_inverse; switch (display->var.bits_per_pixel) { -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 case 8: if (display->var.accel_flags & FB_ACCELF_TEXT) { display->dispsw = &fbcon_retz3_8; @@ -1289,7 +1289,7 @@ display->dispsw = &fbcon_cfb8; break; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 case 16: display->dispsw = &fbcon_cfb16; break; @@ -1351,7 +1351,7 @@ display->can_soft_blank = 1; display->inverse = z3fb_inverse; switch (display->var.bits_per_pixel) { -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 case 8: if (var->accel_flags & FB_ACCELF_TEXT) { display->dispsw = &fbcon_retz3_8; @@ -1360,7 +1360,7 @@ display->dispsw = &fbcon_cfb8; break; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 case 16: display->dispsw = &fbcon_cfb16; break; @@ -1629,7 +1629,7 @@ * Text console acceleration */ -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 static void fbcon_retz3_8_bmove(struct display *p, int sy, int sx, int dy, int dx, int height, int width) { @@ -1676,7 +1676,7 @@ static struct display_switch fbcon_retz3_8 = { fbcon_cfb8_setup, fbcon_retz3_8_bmove, fbcon_retz3_8_clear, - fbcon_cfb8_putc, fbcon_cfb8_putcs, fbcon_cfb8_revc, NULL, - NULL, FONTWIDTH(8) + fbcon_cfb8_putc, fbcon_cfb8_putcs, fbcon_cfb8_revc, NULL, NULL, + fbcon_cfb8_clear_margins, FONTWIDTH(8) }; #endif diff -u --recursive --new-file v2.1.110/linux/drivers/video/sbusfb.c linux/drivers/video/sbusfb.c --- v2.1.110/linux/drivers/video/sbusfb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/sbusfb.c Tue Jul 21 10:28:24 1998 @@ -52,7 +52,6 @@ static int currcon; static int defx_margin = -1, defy_margin = -1; -static int disable __initdata = 0; static char fontname[40] __initdata = { 0 }; static struct { int depth; @@ -156,6 +155,13 @@ return 0; } +static unsigned long sbusfb_mmapsize(struct fb_info_sbusfb *fb, long size) +{ + if (size == SBUS_MMAP_EMPTY) return 0; + if (size >= 0) return size; + return fb->type.fb_size * (-size); +} + static int sbusfb_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma) { @@ -174,7 +180,7 @@ #ifdef __sparc_v9__ /* Align it as much as desirable */ { - int j, max = -1, alignment; + int j, max = -1, alignment, s = 0; map_offset = vma->vm_offset+size; for (i = 0; fb->mmap_map[i].size; i++) { @@ -182,11 +188,13 @@ continue; if (fb->mmap_map[i].voff >= map_offset) break; - if (max < 0 || fb->mmap_map[i].size > fb->mmap_map[max].size) + if (max < 0 || sbusfb_mmapsize(fb,fb->mmap_map[i].size) > s) { max = i; + s = sbusfb_mmapsize(fb,fb->mmap_map[max].size); + } } if (max >= 0) { - j = fb->mmap_map[max].size; + j = s; if (fb->mmap_map[max].voff + j > map_offset) j = map_offset - fb->mmap_map[max].voff; for (alignment = 0x400000; alignment > PAGE_SIZE; alignment >>= 3) @@ -212,8 +220,8 @@ map_size = 0; for (i = 0; fb->mmap_map[i].size; i++) if (fb->mmap_map[i].voff == vma->vm_offset+page) { - map_size = fb->mmap_map[i].size; - map_offset = (fb->physbase + fb->mmap_map[i].poff) & _PAGE_PADDR; + map_size = sbusfb_mmapsize(fb,fb->mmap_map[i].size); + map_offset = (fb->physbase + fb->mmap_map[i].poff) & PAGE_MASK; break; } if (!map_size){ @@ -232,10 +240,14 @@ file->f_count++; vma->vm_flags |= VM_IO; if (!fb->mmaped) { + int lastconsole = 0; + + if (info->display_fg) + lastconsole = info->display_fg->vc_num; fb->mmaped = 1; - if (fb->consolecnt && fb_display[fb->lastconsole].fb_info == info) { - fb->vtconsole = fb->lastconsole; - vt_cons [fb->lastconsole]->vc_mode = KD_GRAPHICS; + if (fb->consolecnt && fb_display[lastconsole].fb_info == info) { + fb->vtconsole = lastconsole; + vt_cons [lastconsole]->vc_mode = KD_GRAPHICS; } else if (fb->unblank && !fb->blanked) (*fb->unblank)(fb); } @@ -520,6 +532,7 @@ { struct fb_info_sbusfb *fb = sbusfbinfo(info); int i; + int lastconsole; switch (cmd){ case FBIOGTYPE: /* return frame buffer type */ @@ -546,9 +559,11 @@ if (i) return i; return -EINVAL; case FBIOSVIDEO: - if (fb->consolecnt && - vt_cons[fb->lastconsole]->vc_mode == KD_TEXT) - break; + if (fb->consolecnt) { + lastconsole = info->display_fg->vc_num; + if (vt_cons[lastconsole]->vc_mode == KD_TEXT) + break; + } get_user_ret(i, (int *)arg, -EFAULT); if (i){ if (!fb->blanked || !fb->unblank) @@ -643,7 +658,8 @@ case FBIOSCURSOR: if (!fb->setcursor) return -EINVAL; if (fb->consolecnt) { - if (vt_cons[fb->lastconsole]->vc_mode == KD_TEXT) + lastconsole = info->display_fg->vc_num; + if (vt_cons[lastconsole]->vc_mode == KD_TEXT) return -EINVAL; /* Don't let graphics programs hide our nice text cursor */ fb->hw_cursor_shown = 0; /* Forget state of our text cursor */ } @@ -653,7 +669,8 @@ if (!fb->setcursor) return -EINVAL; /* Don't let graphics programs move our nice text cursor */ if (fb->consolecnt) { - if (vt_cons[fb->lastconsole]->vc_mode == KD_TEXT) + lastconsole = info->display_fg->vc_num; + if (vt_cons[lastconsole]->vc_mode == KD_TEXT) return -EINVAL; /* Don't let graphics programs move our nice text cursor */ } if (copy_from_user(&fb->cursor.cpos, (void *)arg, sizeof(struct fbcurpos))) @@ -689,9 +706,7 @@ defx_margin = i; defy_margin = j; } } - } else if (!strncmp(p, "disable", 7)) - disable = 1; - else if (!strncmp(p, "font=", 5)) { + } else if (!strncmp(p, "font=", 5)) { int i; for (i = 0; i < sizeof(fontname) - 1; i++) @@ -710,16 +725,17 @@ { int x_margin, y_margin; struct fb_info_sbusfb *fb = sbusfbinfo(info); + int lastconsole; /* Do we have to save the colormap? */ if (fb_display[currcon].cmap.len) fb_get_cmap(&fb_display[currcon].cmap, &fb_display[currcon].var, 1, sbusfb_getcolreg, info); - if (fb->lastconsole != con && - (fb_display[fb->lastconsole].fontwidth != fb_display[con].fontwidth || - fb_display[fb->lastconsole].fontheight != fb_display[con].fontheight)) + lastconsole = info->display_fg->vc_num; + if (lastconsole != con && + (fb_display[lastconsole].fontwidth != fb_display[con].fontwidth || + fb_display[lastconsole].fontheight != fb_display[con].fontheight)) fb->hw_cursor_shown = 0; - fb->lastconsole = con; x_margin = (fb_display[con].var.xres_virtual - fb_display[con].var.xres) / 2; y_margin = (fb_display[con].var.yres_virtual - fb_display[con].var.yres) / 2; if (fb->margins) @@ -855,9 +871,33 @@ return 1; } +void sbusfb_palette(int enter) +{ + int i; + struct display *p; + + for (i = 0; i < MAX_NR_CONSOLES; i++) { + p = &fb_display[i]; + if (p->dispsw && p->dispsw->setup == sbusfb_disp_setup && + p->fb_info->display_fg && + p->fb_info->display_fg->vc_num == i) { + struct fb_info_sbusfb *fb = sbusfbinfod(p); + + if (fb->restore_palette) { + if (enter) + fb->restore_palette(fb); + else if (vt_cons[i]->vc_mode != KD_GRAPHICS) + vc_cons[i].d->vc_sw->con_set_palette(vc_cons[i].d, color_table); + } + } + } +} + /* * Initialisation */ + +extern void (*prom_palette)(int); __initfunc(static void sbusfb_init_fb(int node, int parent, int fbtype, struct linux_sbus_device *sbdp)) @@ -876,6 +916,10 @@ prom_printf("Could not allocate sbusfb structure\n"); return; } + + if (!prom_palette) + prom_palette = sbusfb_palette; + memset(fb, 0, sizeof(struct fb_info_sbusfb)); fix = &fb->fix; var = &fb->var; @@ -893,7 +937,7 @@ fb->emulations[0] = fbtype; #ifndef __sparc_v9__ - disp->screen_base = prom_getintdefault(node, "address", 0); + disp->screen_base = (unsigned char *)prom_getintdefault(node, "address", 0); #endif type->fb_height = h = prom_getintdefault(node, "height", 900); @@ -991,6 +1035,7 @@ fb->dispsw.set_font = sbusfb_set_font; fb->setup = fb->dispsw.setup; fb->dispsw.setup = sbusfb_disp_setup; + fb->dispsw.clear_margins = NULL; disp->var = *var; disp->visual = fix->visual; @@ -1015,47 +1060,53 @@ char *p; for (p = name; *p && *p != ','; p++); if (*p == ',') name = p + 1; - if (!strcmp(p, "cgsix") || !strcmp(p, "cgthree+")) + if (!strcmp(name, "cgsix") || !strcmp(name, "cgthree+")) return FBTYPE_SUNFAST_COLOR; - if (!strcmp(p, "cgthree") || !strcmp(p, "cgRDI")) + if (!strcmp(name, "cgthree") || !strcmp(name, "cgRDI")) return FBTYPE_SUN3COLOR; - if (!strcmp(p, "cgfourteen")) + if (!strcmp(name, "cgfourteen")) return FBTYPE_MDICOLOR; - if (!strcmp(p, "leo")) + if (!strcmp(name, "leo")) return FBTYPE_SUNLEO; - if (!strcmp(p, "bwtwo")) + if (!strcmp(name, "bwtwo")) return FBTYPE_SUN2BW; - if (!strcmp(p, "tcx")) + if (!strcmp(name, "tcx")) return FBTYPE_TCXCOLOR; return FBTYPE_NOTYPE; } __initfunc(void sbusfb_init(void)) { - int node, root, type; + int type; struct linux_sbus_device *sbdp; struct linux_sbus *sbus; char prom_name[40]; extern int con_is_present(void); - if (!con_is_present() || disable) return; + if (!con_is_present()) return; #ifdef CONFIG_FB_CREATOR - root = prom_getchild(prom_root_node); - for (node = prom_searchsiblings(root, "SUNW,ffb"); node; - node = prom_searchsiblings(prom_getsibling(node), "SUNW,ffb")) { - sbusfb_init_fb(node, prom_root_node, FBTYPE_CREATOR, NULL); + { + int root, node; + root = prom_getchild(prom_root_node); + for (node = prom_searchsiblings(root, "SUNW,ffb"); node; + node = prom_searchsiblings(prom_getsibling(node), "SUNW,ffb")) { + sbusfb_init_fb(node, prom_root_node, FBTYPE_CREATOR, NULL); + } } #endif #ifdef CONFIG_SUN4 sbusfb_init_fb(0, 0, FBTYPE_SUN2BW, NULL); #endif #if defined(CONFIG_FB_CGFOURTEEN) && !defined(__sparc_v9__) - root = prom_getchild(prom_root_node); - root = prom_searchsiblings(root, "obio"); - if (root && - (node = prom_searchsiblings(prom_getchild(root), "cgfourteen"))) { - sbusfb_init_fb(node, root, FBTYPE_MDICOLOR, NULL); + { + int root, node; + root = prom_getchild(prom_root_node); + root = prom_searchsiblings(root, "obio"); + if (root && + (node = prom_searchsiblings(prom_getchild(root), "cgfourteen"))) { + sbusfb_init_fb(node, root, FBTYPE_MDICOLOR, NULL); + } } #endif if (!SBus_chain) return; diff -u --recursive --new-file v2.1.110/linux/drivers/video/sbusfb.h linux/drivers/video/sbusfb.h --- v2.1.110/linux/drivers/video/sbusfb.h Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/sbusfb.h Tue Jul 21 10:28:24 1998 @@ -41,6 +41,9 @@ unsigned long size; }; +#define SBUS_MMAP_FBSIZE(n) (-n) +#define SBUS_MMAP_EMPTY 0x80000000 + struct fb_info_sbusfb { struct fb_info info; struct fb_fix_screeninfo fix; @@ -63,7 +66,6 @@ int x_margin; int y_margin; int vtconsole; - int lastconsole; int consolecnt; int emulations[4]; struct sbus_mmap_map *mmap_map; @@ -81,6 +83,7 @@ void (*reset)(struct fb_info_sbusfb *); void (*fill)(struct fb_info_sbusfb *, int, int, unsigned short *); void (*switch_from_graph)(struct fb_info_sbusfb *); + void (*restore_palette)(struct fb_info_sbusfb *); }; extern char *creatorfb_init(struct fb_info_sbusfb *); diff -u --recursive --new-file v2.1.110/linux/drivers/video/skeletonfb.c linux/drivers/video/skeletonfb.c --- v2.1.110/linux/drivers/video/skeletonfb.c Thu Jul 16 18:09:27 1998 +++ linux/drivers/video/skeletonfb.c Tue Jul 21 10:28:24 1998 @@ -244,15 +244,15 @@ * If you don't have any appropriate operations, simple fill in the NULL * pointer, and there will be no text output. */ -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 if (is_cfb8) return &fbcon_cfb8; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 if (is_cfb16) return &fbcon_cfb16; #endif -#ifdef CONFIG_FBCON_CFB32 +#ifdef FBCON_HAS_CFB32 if (is_cfb32) return &fbcon_cfb32; #endif diff -u --recursive --new-file v2.1.110/linux/drivers/video/tgafb.c linux/drivers/video/tgafb.c --- v2.1.110/linux/drivers/video/tgafb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/tgafb.c Tue Jul 21 10:28:24 1998 @@ -741,22 +741,21 @@ disp.can_soft_blank = 1; disp.inverse = 0; switch (tga_type) { -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 case 0: /* 8-plane */ disp.dispsw = &fbcon_cfb8; - disp.scrollmode = SCROLL_YREDRAW; break; #endif -#ifdef CONFIG_FBCON_CFB32 +#ifdef FBCON_HAS_CFB32 case 1: /* 24-plane */ case 3: /* 24plusZ */ disp.dispsw = &fbcon_cfb32; - disp.scrollmode = SCROLL_YREDRAW; break; #endif default: disp.dispsw = NULL; } + disp.scrollmode = SCROLL_YREDRAW; strcpy(fb_info.modename, fb_fix.id); fb_info.node = -1; @@ -842,10 +841,10 @@ palette[regno].green = green; palette[regno].blue = blue; -#ifdef CONFIG_FBCON_CFB32 +#ifdef FBCON_HAS_CFB32 if (regno < 16 && tga_type != 0) fbcon_cfb32_cmap[regno] = (red << 16) | (green << 8) | blue; -#endif /* CONFIG_FBCON_CFB32 */ +#endif /* How to set a single color register?? */ diff -u --recursive --new-file v2.1.110/linux/drivers/video/vesafb.c linux/drivers/video/vesafb.c --- v2.1.110/linux/drivers/video/vesafb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/vesafb.c Tue Jul 21 10:28:24 1998 @@ -171,18 +171,18 @@ vesafb_get_var(&display->var, -1, &fb_info); switch (video_bpp) { -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 case 8: sw = &fbcon_cfb8; break; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 case 15: case 16: sw = &fbcon_cfb16; break; #endif -#ifdef CONFIG_FBCON_CFB32 +#ifdef FBCON_HAS_CFB32 case 32: sw = &fbcon_cfb32; break; @@ -242,7 +242,7 @@ palette[regno].blue = blue; switch (video_bpp) { -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 case 8: /* Hmm, can we do it _always_ this way ??? */ outb_p(regno, dac_reg); @@ -251,19 +251,19 @@ outb_p(blue, dac_val); break; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 case 15: case 16: fbcon_cfb16_cmap[regno] = (red << vesafb_defined.red.offset) | (green << 5) | blue; break; #endif -#ifdef CONFIG_FBCON_CFB24 +#ifdef FBCON_HAS_CFB24 case 24: /* FIXME: todo */ break; #endif -#ifdef CONFIG_FBCON_CFB32 +#ifdef FBCON_HAS_CFB32 case 32: fbcon_cfb32_cmap[regno] = (red << vesafb_defined.red.offset) | diff -u --recursive --new-file v2.1.110/linux/drivers/video/vfb.c linux/drivers/video/vfb.c --- v2.1.110/linux/drivers/video/vfb.c Thu Jul 16 18:09:28 1998 +++ linux/drivers/video/vfb.c Tue Jul 21 10:28:24 1998 @@ -260,37 +260,37 @@ display->can_soft_blank = 1; display->inverse = 0; switch (var->bits_per_pixel) { -#ifdef CONFIG_FBCON_MFB +#ifdef FBCON_HAS_MFB case 1: display->dispsw = &fbcon_mfb; break; #endif -#ifdef CONFIG_FBCON_CFB2 +#ifdef FBCON_HAS_CFB2 case 2: display->dispsw = &fbcon_cfb2; break; #endif -#ifdef CONFIG_FBCON_CFB4 +#ifdef FBCON_HAS_CFB4 case 4: display->dispsw = &fbcon_cfb4; break; #endif -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 case 8: display->dispsw = &fbcon_cfb8; break; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 case 16: display->dispsw = &fbcon_cfb16; break; #endif -#ifdef CONFIG_FBCON_CFB24 +#ifdef FBCON_HAS_CFB24 case 24: display->dispsw = &fbcon_cfb24; break; #endif -#ifdef CONFIG_FBCON_CFB32 +#ifdef FBCON_HAS_CFB32 case 32: display->dispsw = &fbcon_cfb32; break; diff -u --recursive --new-file v2.1.110/linux/drivers/video/vgacon.c linux/drivers/video/vgacon.c --- v2.1.110/linux/drivers/video/vgacon.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/vgacon.c Tue Jul 21 10:28:24 1998 @@ -33,16 +33,7 @@ * more details. */ -/* KNOWN PROBLEMS/TO DO ========================================FIXME======== * - * - * - monochrome attribute encoding (convert abscon <-> VGA style) - * - * - Cursor shape fixes - * - * KNOWN PROBLEMS/TO DO ==================================================== */ - -#include #include #include #include @@ -66,6 +57,13 @@ #define CAN_LOAD_EGA_FONTS /* undefine if the user must not do this */ #define CAN_LOAD_PALETTE /* undefine if the user must not do this */ +/* You really do _NOT_ want to define this, unless you have buggy + * Trident VGA which will resize cursor when moving it between column + * 15 & 16. If you define this and your VGA is OK, inverse bug will + * appear. + */ +#undef TRIDENT_GLITCH + #undef VGA_CAN_DO_64KB #define dac_reg 0x3c8 @@ -88,13 +86,14 @@ static void vgacon_cursor(struct vc_data *c, int mode); static int vgacon_switch(struct vc_data *c); static int vgacon_blank(struct vc_data *c, int blank); -static int vgacon_get_font(struct vc_data *c, int *w, int *h, char *data); -static int vgacon_set_font(struct vc_data *c, int w, int h, char *data); +static int vgacon_font_op(struct vc_data *c, struct console_font_op *op); static int vgacon_set_palette(struct vc_data *c, unsigned char *table); static int vgacon_scrolldelta(struct vc_data *c, int lines); static int vgacon_set_origin(struct vc_data *c); static void vgacon_save_screen(struct vc_data *c); static int vgacon_scroll(struct vc_data *c, int t, int b, int dir, int lines); +static u8 vgacon_build_attr(struct vc_data *c, u8 color, u8 intensity, u8 blink, u8 underline, u8 reverse); +static void vgacon_invert_region(struct vc_data *c, u16 *p, int count); /* Description of the hardware situation */ @@ -113,6 +112,8 @@ static int vga_vesa_blanked; static int vga_palette_blanked; static int vga_is_gfx; +static int vga_512_chars; +static int vga_video_font_height; void no_scroll(char *str, int *ints) @@ -282,7 +283,7 @@ || vga_video_type == VIDEO_TYPE_EGAM) { vga_hardscroll_enabled = vga_hardscroll_user_enable; vga_default_font_height = ORIG_VIDEO_POINTS; - video_font_height = ORIG_VIDEO_POINTS; + vga_video_font_height = video_font_height = ORIG_VIDEO_POINTS; /* This may be suboptimal but is a safe bet - go with it */ video_scan_lines = video_font_height * vga_video_num_lines; @@ -291,22 +292,98 @@ return display_desc; } +static int vga_use_count; + static void vgacon_init(struct vc_data *c, int init) { /* We cannot be loaded as a module, therefore init is always 1 */ c->vc_can_do_color = vga_can_do_color; c->vc_cols = vga_video_num_columns; c->vc_rows = vga_video_num_lines; + c->vc_complement_mask = 0x7700; + vga_use_count++; +} + +static inline void vga_set_mem_top(struct vc_data *c) +{ + write_vga(12, (c->vc_visible_origin-vga_vram_base)/2); } static void vgacon_deinit(struct vc_data *c) { - vgacon_set_origin(c); + /* When closing the last console, reset video origin */ + if (!--vga_use_count) { + c->vc_visible_origin = vga_vram_base; + vga_set_mem_top(c); + } } -static inline void vga_set_mem_top(struct vc_data *c) +static u8 vgacon_build_attr(struct vc_data *c, u8 color, u8 intensity, u8 blink, u8 underline, u8 reverse) { - write_vga(12, (c->vc_visible_origin-vga_vram_base)/2); + u8 attr = color; + + if (vga_can_do_color) { + if (underline) + attr = (attr & 0xf0) | c->vc_ulcolor; + else if (intensity == 0) + attr = (attr & 0xf0) | c->vc_halfcolor; + } + if (reverse) + attr = ((attr) & 0x88) | ((((attr) >> 4) | ((attr) << 4)) & 0x77); + if (blink) + attr ^= 0x80; + if (intensity == 2) + attr ^= 0x08; + if (!vga_can_do_color) { + if (underline) + attr = (attr & 0xf8) | 0x01; + else if (intensity == 0) + attr = (attr & 0xf0) | 0x08; + } + return attr; +} + +static void vgacon_invert_region(struct vc_data *c, u16 *p, int count) +{ + int col = vga_can_do_color; + + while (count--) { + u16 a = *p; + if (col) + a = ((a) & 0x88ff) | (((a) & 0x7000) >> 4) | (((a) & 0x0700) << 4); + else + a ^= ((a & 0x0700) == 0x0100) ? 0x7000 : 0x7700; + *p++ = a; + } +} + +static void vgacon_set_cursor_size(int xpos, int from, int to) +{ + unsigned long flags; + int curs, cure; + static int lastfrom, lastto; + +#ifdef TRIDENT_GLITCH + if (xpos<16) from--, to--; +#endif + + if ((from == lastfrom) && (to == lastto)) return; + lastfrom = from; lastto = to; + + save_flags(flags); cli(); + outb_p(0x0a, vga_video_port_reg); /* Cursor start */ + curs = inb_p(vga_video_port_val); + outb_p(0x0b, vga_video_port_reg); /* Cursor end */ + cure = inb_p(vga_video_port_val); + + curs = (curs & 0xc0) | from; + cure = (cure & 0xe0) | to; + + outb_p(0x0a, vga_video_port_reg); /* Cursor start */ + outb_p(curs, vga_video_port_val); + outb_p(0x0b, vga_video_port_reg); /* Cursor end */ + outb_p(cure, vga_video_port_val); + restore_flags(flags); } static void vgacon_cursor(struct vc_data *c, int mode) @@ -321,6 +398,34 @@ case CM_MOVE: case CM_DRAW: write_vga(14, (c->vc_pos-vga_vram_base)/2); + switch (c->vc_cursor_type & 0x0f) { + case CUR_UNDERLINE: + vgacon_set_cursor_size(c->vc_x, + video_font_height - (video_font_height < 10 ? 2 : 3), + video_font_height - (video_font_height < 10 ? 1 : 2)); + break; + case CUR_TWO_THIRDS: + vgacon_set_cursor_size(c->vc_x, + video_font_height / 3, + video_font_height - (video_font_height < 10 ? 1 : 2)); + break; + case CUR_LOWER_THIRD: + vgacon_set_cursor_size(c->vc_x, + (video_font_height*2) / 3, + video_font_height - (video_font_height < 10 ? 1 : 2)); + break; + case CUR_LOWER_HALF: + vgacon_set_cursor_size(c->vc_x, + video_font_height / 2, + video_font_height - (video_font_height < 10 ? 1 : 2)); + break; + case CUR_NONE: + vgacon_set_cursor_size(c->vc_x, 31, 30); + break; + default: + vgacon_set_cursor_size(c->vc_x, 1, video_font_height); + break; + } break; } } @@ -517,11 +622,11 @@ return 0; } scr_memsetw((void *)vga_vram_base, BLANK, vc_cons[0].d->vc_screenbuf_size); - return 0; + return 1; case -1: /* Entering graphic mode */ scr_memsetw((void *)vga_vram_base, BLANK, vc_cons[0].d->vc_screenbuf_size); vga_is_gfx = 1; - return 0; + return 1; default: /* VESA blanking */ if (vga_video_type == VIDEO_TYPE_VGAC) { vga_vesa_blank(blank-1); @@ -543,6 +648,8 @@ * (sizif@botik.yaroslavl.su). */ +#ifdef CAN_LOAD_EGA_FONTS + #define colourmap 0xa0000 /* Pauline Middelink reports that we should use 0xA0000 for the bwmap as well.. */ @@ -550,29 +657,25 @@ #define cmapsz 8192 static int -vgacon_font_op(char *arg, int set) +vgacon_do_font_op(char *arg, int set, int ch512) { -#ifdef CAN_LOAD_EGA_FONTS - int ch512 = video_mode_512ch; - static int ch512enabled = 0; int i; char *charmap; int beg; unsigned short video_port_status = vga_video_port_reg + 6; int font_select = 0x00; - if (vga_video_type == VIDEO_TYPE_EGAC || vga_video_type == VIDEO_TYPE_VGAC) { + if (vga_video_type != VIDEO_TYPE_EGAM) { charmap = (char *)VGA_MAP_MEM(colourmap); beg = 0x0e; #ifdef VGA_CAN_DO_64KB if (video_type == VIDEO_TYPE_VGAC) beg = 0x06; #endif - } else if (vga_video_type == VIDEO_TYPE_EGAM) { + } else { charmap = (char *)VGA_MAP_MEM(blackwmap); beg = 0x0a; - } else - return -EINVAL; + } #ifdef BROKEN_GRAPHICS_PROGRAMS /* @@ -666,8 +769,14 @@ outb_p( beg, gr_port_val ); /* map starts at b800:0 or b000:0 */ /* if 512 char mode is already enabled don't re-enable it. */ - if ((set)&&(ch512!=ch512enabled)) { /* attribute controller */ - ch512enabled=ch512; + if ((set)&&(ch512!=vga_512_chars)) { /* attribute controller */ + int i; + for(i=0; ivc_sw == &vga_con) + c->vc_hi_font_mask = ch512 ? 0x0800 : 0; + } + vga_512_chars=ch512; /* 256-char: enable intensity bit 512-char: disable intensity bit */ inb_p( video_port_status ); /* clear address flip-flop */ @@ -681,9 +790,6 @@ sti(); return 0; -#else - return -EINVAL; -#endif } /* @@ -693,16 +799,12 @@ vgacon_adjust_height(unsigned fontheight) { int rows, maxscan; - unsigned char ovr, vde, fsr, curs, cure; + unsigned char ovr, vde, fsr; - if (fontheight > 32 || (vga_video_type != VIDEO_TYPE_VGAC && - vga_video_type != VIDEO_TYPE_EGAC && vga_video_type != VIDEO_TYPE_EGAM)) - return -EINVAL; - - if (fontheight == video_font_height) + if (fontheight == vga_video_font_height) return 0; - video_font_height = fontheight; + vga_video_font_height = video_font_height = fontheight; rows = video_scan_lines/fontheight; /* Number of video rows we end up with */ maxscan = rows*fontheight - 1; /* Scan lines to actually display-1 */ @@ -722,10 +824,6 @@ ovr = inb_p(vga_video_port_val); outb_p( 0x09, vga_video_port_reg ); /* Font size register */ fsr = inb_p(vga_video_port_val); - outb_p( 0x0a, vga_video_port_reg ); /* Cursor start */ - curs = inb_p(vga_video_port_val); - outb_p( 0x0b, vga_video_port_reg ); /* Cursor end */ - cure = inb_p(vga_video_port_val); sti(); vde = maxscan & 0xff; /* Vertical display end reg */ @@ -733,18 +831,12 @@ ((maxscan & 0x100) >> 7) + ((maxscan & 0x200) >> 3); fsr = (fsr & 0xe0) + (fontheight-1); /* Font size register */ - curs = (curs & 0xc0) + fontheight - (fontheight < 10 ? 2 : 3); - cure = (cure & 0xe0) + fontheight - (fontheight < 10 ? 1 : 2); cli(); outb_p( 0x07, vga_video_port_reg ); /* CRTC overflow register */ outb_p( ovr, vga_video_port_val ); outb_p( 0x09, vga_video_port_reg ); /* Font size */ outb_p( fsr, vga_video_port_val ); - outb_p( 0x0a, vga_video_port_reg ); /* Cursor start */ - outb_p( curs, vga_video_port_val ); - outb_p( 0x0b, vga_video_port_reg ); /* Cursor end */ - outb_p( cure, vga_video_port_val ); outb_p( 0x12, vga_video_port_reg ); /* Vertical display limit */ outb_p( vde, vga_video_port_val ); sti(); @@ -753,38 +845,50 @@ return 0; } -static int vgacon_get_font(struct vc_data *c, int *w, int *h, char *data) -{ - *w = 8; - *h = video_font_height; - return vgacon_font_op(data, 0); -} - -static int vgacon_set_font(struct vc_data *c, int w, int h, char *data) +static int vgacon_font_op(struct vc_data *c, struct console_font_op *op) { int rc; - if (w != 8 || h > 32) + + if (vga_video_type < VIDEO_TYPE_EGAM) return -EINVAL; - rc = vgacon_font_op(data, 1); - if (!rc) - rc = vgacon_adjust_height(h); + + if (op->op == KD_FONT_OP_SET) { + if (op->width != 8 || (op->charcount != 256 && op->charcount != 512)) + return -EINVAL; + rc = vgacon_do_font_op(op->data, 1, op->charcount == 512); + if (!rc && !(op->flags & KD_FONT_FLAG_DONT_RECALC)) + rc = vgacon_adjust_height(op->height); + } else if (op->op == KD_FONT_OP_GET) { + op->width = 8; + op->height = vga_video_font_height; + op->charcount = vga_512_chars ? 512 : 256; + rc = vgacon_do_font_op(op->data, 0, 0); + } else + rc = -ENOSYS; return rc; } +#else + +static int vgacon_font_op(struct vc_data *c, struct console_font_op *op) +{ + return -ENOSYS; +} + +#endif + static int vgacon_scrolldelta(struct vc_data *c, int lines) { - /* FIXME: Better scrollback strategy, maybe move it to generic code - * and leave only vga_set_mem_top here. - */ if (!lines) /* Turn scrollback off */ c->vc_visible_origin = c->vc_origin; else { int p = c->vc_visible_origin - vga_vram_base; + int margin = c->vc_rows/4 * c->vc_size_row; p += lines * c->vc_size_row; - if (p < 0) + if (lines < 0 && p < margin) p = 0; c->vc_visible_origin = p + vga_vram_base; - if (c->vc_visible_origin > c->vc_origin) + if (lines > 0 && c->vc_visible_origin > c->vc_origin - margin) c->vc_visible_origin = c->vc_origin; } vga_set_mem_top(c); @@ -793,7 +897,8 @@ static int vgacon_set_origin(struct vc_data *c) { - if (vga_is_gfx) /* We don't play origin tricks in graphic modes */ + if (vga_is_gfx || /* We don't play origin tricks in graphic modes */ + (console_blanked && !vga_palette_blanked)) /* Nor we write to blanked screens */ return 0; c->vc_origin = c->vc_visible_origin = vga_vram_base; vga_set_mem_top(c); @@ -819,6 +924,7 @@ static int vgacon_scroll(struct vc_data *c, int t, int b, int dir, int lines) { unsigned long oldo; + unsigned int delta; if (t || b != c->vc_rows || vga_is_gfx) return 0; @@ -826,21 +932,33 @@ if (c->vc_origin != c->vc_visible_origin) vgacon_scrolldelta(c, 0); - /* FIXME: Handle scrolling down or by more lines? */ - if (!vga_hardscroll_enabled || dir != SM_UP || lines != 1) + if (!vga_hardscroll_enabled || lines >= c->vc_rows/2) return 0; oldo = c->vc_origin; - if (c->vc_scr_end + c->vc_size_row >= vga_vram_end) { - scr_memcpyw((u16 *)vga_vram_base, - (u16 *)(oldo + c->vc_size_row), - c->vc_screenbuf_size - c->vc_size_row); - c->vc_origin = vga_vram_base; - } else - c->vc_origin += c->vc_size_row; - c->vc_visible_origin = c->vc_origin; + delta = lines * c->vc_size_row; + if (dir == SM_UP) { + if (c->vc_scr_end + delta >= vga_vram_end) { + scr_memcpyw((u16 *)vga_vram_base, + (u16 *)(oldo + delta), + c->vc_screenbuf_size - delta); + c->vc_origin = vga_vram_base; + } else + c->vc_origin += delta; + scr_memsetw((u16 *)(c->vc_origin + c->vc_screenbuf_size - delta), c->vc_video_erase_char, delta); + } else { + if (oldo - delta < vga_vram_base) { + scr_memmovew((u16 *)(vga_vram_end - c->vc_screenbuf_size + delta), + (u16 *)oldo, + c->vc_screenbuf_size - delta); + c->vc_origin = vga_vram_end - c->vc_screenbuf_size; + } else + c->vc_origin -= delta; + c->vc_scr_end = c->vc_origin + c->vc_screenbuf_size; + scr_memsetw((u16 *)(c->vc_origin), c->vc_video_erase_char, delta); + } c->vc_scr_end = c->vc_origin + c->vc_screenbuf_size; - scr_memsetw((u16 *)(c->vc_scr_end - c->vc_size_row), c->vc_video_erase_char, c->vc_size_row); + c->vc_visible_origin = c->vc_origin; vga_set_mem_top(c); c->vc_pos = (c->vc_pos - oldo) + c->vc_origin; return 1; @@ -870,10 +988,11 @@ DUMMY, /* con_bmove */ vgacon_switch, vgacon_blank, - vgacon_get_font, - vgacon_set_font, + vgacon_font_op, vgacon_set_palette, vgacon_scrolldelta, vgacon_set_origin, - vgacon_save_screen + vgacon_save_screen, + vgacon_build_attr, + vgacon_invert_region }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/vgafb.c linux/drivers/video/vgafb.c --- v2.1.110/linux/drivers/video/vgafb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/vgafb.c Tue Jul 21 10:28:24 1998 @@ -745,7 +745,8 @@ static struct display_switch fbcon_vgafb = { fbcon_vga_setup, fbcon_vga_bmove, fbcon_vga_clear, fbcon_vga_putc, - fbcon_vga_putcs, fbcon_vga_revc, fbcon_vgafb_cursor, NULL, FONTWIDTH(8) + fbcon_vga_putcs, fbcon_vga_revc, fbcon_vgafb_cursor, NULL, NULL, + FONTWIDTH(8) }; diff -u --recursive --new-file v2.1.110/linux/drivers/video/virgefb.c linux/drivers/video/virgefb.c --- v2.1.110/linux/drivers/video/virgefb.c Tue Jul 21 00:15:32 1998 +++ linux/drivers/video/virgefb.c Tue Jul 21 10:28:24 1998 @@ -270,7 +270,7 @@ * Text console acceleration */ -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 static struct display_switch fbcon_virge8; #endif @@ -847,7 +847,7 @@ display->can_soft_blank = 1; display->inverse = Cyberfb_inverse; switch (display->var.bits_per_pixel) { -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 case 8: if (display->var.accel_flags & FB_ACCELF_TEXT) { display->dispsw = &fbcon_virge8; @@ -856,7 +856,7 @@ display->dispsw = &fbcon_virge8; break; #endif -#ifdef CONFIG_FBCON_CFB16 +#ifdef FBCON_HAS_CFB16 case 16: display->dispsw = &fbcon_cfb16; break; @@ -1139,7 +1139,7 @@ * Text console acceleration */ -#ifdef CONFIG_FBCON_CFB8 +#ifdef FBCON_HAS_CFB8 static void fbcon_virge8_bmove(struct display *p, int sy, int sx, int dy, int dx, int height, int width) { @@ -1163,7 +1163,8 @@ static struct display_switch fbcon_virge8 = { fbcon_cfb8_setup, fbcon_virge8_bmove, fbcon_virge8_clear, fbcon_cfb8_putc, - fbcon_cfb8_putcs, fbcon_cfb8_revc, NULL, NULL, FONTWIDTH(8) + fbcon_cfb8_putcs, fbcon_cfb8_revc, NULL, NULL, fbcon_cfb8_clear_margins, + FONTWIDTH(8) }; #endif diff -u --recursive --new-file v2.1.110/linux/fs/proc/base.c linux/fs/proc/base.c --- v2.1.110/linux/fs/proc/base.c Wed Jun 24 22:54:10 1998 +++ linux/fs/proc/base.c Tue Jul 21 11:39:16 1998 @@ -13,6 +13,7 @@ #include #include #include +#include static struct file_operations proc_base_operations = { NULL, /* lseek - default */ @@ -120,7 +121,7 @@ }; static struct proc_dir_entry proc_pid_fd = { PROC_PID_FD, 2, "fd", - S_IFDIR | S_IRUSR | S_IXUSR, 1, 0, 0, + S_IFDIR | S_IRUSR | S_IXUSR, 2, 0, 0, 0, &proc_fd_inode_operations, NULL, proc_pid_fill_inode, }; @@ -173,7 +174,7 @@ }; #endif -void proc_base_init(void) +__initfunc(void proc_base_init(void)) { #if CONFIG_AP1000 proc_register(&proc_pid, &proc_pid_ringbuf); diff -u --recursive --new-file v2.1.110/linux/fs/proc/generic.c linux/fs/proc/generic.c --- v2.1.110/linux/fs/proc/generic.c Thu May 14 19:47:43 1998 +++ linux/fs/proc/generic.c Tue Jul 21 11:39:16 1998 @@ -260,13 +260,16 @@ ent->name = ((char *) ent) + sizeof(*ent); ent->namelen = len; - if (mode == S_IFDIR) { + if (S_ISDIR(mode)) { + if ((mode & S_IALLUGO) == 0) mode |= S_IRUGO | S_IXUGO; ent->ops = &proc_dyna_dir_inode_operations; ent->nlink = 2; - } - else if (mode == 0) { - mode = S_IFREG | S_IRUGO; + } else { + if ((mode & S_IFMT) == 0) + mode |= S_IFREG; + if ((mode & S_IALLUGO) == 0) + mode |= S_IRUGO; ent->nlink = 1; } ent->mode = mode; diff -u --recursive --new-file v2.1.110/linux/fs/proc/proc_tty.c linux/fs/proc/proc_tty.c --- v2.1.110/linux/fs/proc/proc_tty.c Wed Dec 3 15:21:57 1997 +++ linux/fs/proc/proc_tty.c Tue Jul 21 11:39:16 1998 @@ -6,6 +6,7 @@ #include +#include #include #include #include @@ -169,7 +170,7 @@ /* * Called by proc_root_init() to initialize the /proc/tty subtree */ -void proc_tty_init(void) +__initfunc(void proc_tty_init(void)) { struct proc_dir_entry *ent; diff -u --recursive --new-file v2.1.110/linux/fs/proc/root.c linux/fs/proc/root.c --- v2.1.110/linux/fs/proc/root.c Thu Jul 16 18:09:28 1998 +++ linux/fs/proc/root.c Tue Jul 21 11:39:16 1998 @@ -13,6 +13,7 @@ #include #include #include +#include #include #ifdef CONFIG_KMOD #include @@ -632,7 +633,7 @@ }; #endif -void proc_root_init(void) +__initfunc(void proc_root_init(void)) { proc_base_init(); proc_register(&proc_root, &proc_root_loadavg); diff -u --recursive --new-file v2.1.110/linux/include/asm-i386/fixmap.h linux/include/asm-i386/fixmap.h --- v2.1.110/linux/include/asm-i386/fixmap.h Tue Jul 21 00:15:32 1998 +++ linux/include/asm-i386/fixmap.h Tue Jul 21 10:46:42 1998 @@ -33,16 +33,16 @@ * task switches. */ -enum fixed_addresses { /* * on UP currently we will have no trace of the fixmap mechanizm, * no page table allocations, etc. This might change in the * future, say framebuffers for the console driver(s) could be * fix-mapped? */ +enum fixed_addresses { #if __SMP__ - FIX_APIC_BASE = 1, /* 0xfffff000 */ - FIX_IO_APIC_BASE = 2, /* 0xffffe000 */ + FIX_APIC_BASE, + FIX_IO_APIC_BASE, #endif __end_of_fixed_addresses }; @@ -50,9 +50,15 @@ extern void set_fixmap (enum fixed_addresses idx, unsigned long phys); /* - * used by vmalloc.c: + * used by vmalloc.c. + * + * Leave one empty page between vmalloc'ed areas and + * the start of the fixmap, and leave one page empty + * at the top of mem.. */ -#define FIXADDR_START (0UL-((__end_of_fixed_addresses-1)<= __end_of_fixed_addresses)) + if (idx >= __end_of_fixed_addresses) panic("illegal fixaddr index!"); - return (0UL-(unsigned long)(idx< +unsigned char linux_logo16_red[0]; +unsigned char linux_logo16_green[0]; +unsigned char linux_logo16_blue[0]; +unsigned char linux_logo16[0]; + +#else + +/* prototypes only */ +extern unsigned char linux_logo_red[]; +extern unsigned char linux_logo_green[]; +extern unsigned char linux_logo_blue[]; +extern unsigned char linux_logo[]; +extern unsigned char linux_logo_bw[]; +extern unsigned char linux_logo16_red[]; +extern unsigned char linux_logo16_green[]; +extern unsigned char linux_logo16_blue[]; +extern unsigned char linux_logo16[]; + +#endif diff -u --recursive --new-file v2.1.110/linux/include/linux/console.h linux/include/linux/console.h --- v2.1.110/linux/include/linux/console.h Tue Jul 21 00:15:33 1998 +++ linux/include/linux/console.h Tue Jul 21 10:28:23 1998 @@ -15,6 +15,7 @@ #define _LINUX_CONSOLE_H_ 1 struct vc_data; +struct console_font_op; /* * this is what the terminal answers to a ESC-Z or csi0c query. @@ -22,8 +23,6 @@ #define VT100ID "\033[?1;2c" #define VT102ID "\033[?6c" -/* DPC: 1994-04-13 !!! con_putcs is new entry !!! */ - struct consw { const char *(*con_startup)(void); void (*con_init)(struct vc_data *, int); @@ -36,12 +35,13 @@ void (*con_bmove)(struct vc_data *, int, int, int, int, int, int); int (*con_switch)(struct vc_data *); int (*con_blank)(struct vc_data *, int); - int (*con_get_font)(struct vc_data *, int *, int *, char *); - int (*con_set_font)(struct vc_data *, int, int, char *); + int (*con_font_op)(struct vc_data *, struct console_font_op *); int (*con_set_palette)(struct vc_data *, unsigned char *); int (*con_scrolldelta)(struct vc_data *, int); int (*con_set_origin)(struct vc_data *); void (*con_save_screen)(struct vc_data *); + u8 (*con_build_attr)(struct vc_data *, u8, u8, u8, u8, u8); + void (*con_invert_region)(struct vc_data *, u16 *, int); }; extern struct consw *conswitchp; @@ -108,10 +108,10 @@ extern int unregister_console(struct console *); extern struct console *console_drivers; -/* VEA Blanking Levels */ +/* VESA Blanking Levels */ #define VESA_NO_BLANKING 0 #define VESA_VSYNC_SUSPEND 1 #define VESA_HSYNC_SUSPEND 2 #define VESA_POWERDOWN 3 -#endif /* linux/console.h */ +#endif /* _LINUX_CONSOLE_H */ diff -u --recursive --new-file v2.1.110/linux/include/linux/console_struct.h linux/include/linux/console_struct.h --- v2.1.110/linux/include/linux/console_struct.h Tue Jul 21 00:15:33 1998 +++ linux/include/linux/console_struct.h Tue Jul 21 10:28:23 1998 @@ -1,7 +1,12 @@ /* * console_struct.h * - * Data structure and defines shared between console.c, vga.c and tga.c + * Data structure describing single virtual console except for data + * used by vt.c. + * + * Fields marked with [#] must be set by the low-level driver. + * Fields marked with [!] can be changed by the low-level driver + * to achieve effects such as fast scrolling by changing the origin. */ /* @@ -10,11 +15,13 @@ */ #define CUR_DEFAULT CUR_UNDERLINE +#include + #define NPAR 16 struct vc_data { unsigned short vc_num; /* Console number */ - unsigned int vc_cols; /* Console size */ + unsigned int vc_cols; /* [#] Console size */ unsigned int vc_rows; unsigned int vc_size_row; /* Bytes per row */ struct consw *vc_sw; @@ -27,14 +34,15 @@ unsigned char vc_s_color; /* Saved foreground & background */ unsigned char vc_ulcolor; /* Color for underline mode */ unsigned char vc_halfcolor; /* Color for half intensity mode */ + unsigned short vc_complement_mask; /* [#] Xor mask for mouse pointer */ + unsigned short vc_hi_font_mask; /* [#] Attribute set for upper 256 chars or font or 0 if not supported */ unsigned int vc_x, vc_y; /* Cursor position */ unsigned int vc_top, vc_bottom; /* Scrolling region */ unsigned int vc_state; /* Escape sequence parser state */ unsigned int vc_npar,vc_par[NPAR]; /* Parameters of current escape sequence */ - unsigned long vc_scr_top; /* Top of video memory */ - unsigned long vc_origin; /* Start of real screen */ - unsigned long vc_scr_end; /* End of real screen */ - unsigned long vc_visible_origin; /* Top of visible window */ + unsigned long vc_origin; /* [!] Start of real screen */ + unsigned long vc_scr_end; /* [!] End of real screen */ + unsigned long vc_visible_origin; /* [!] Top of visible window */ unsigned long vc_pos; /* Cursor address */ unsigned int vc_saved_x; unsigned int vc_saved_y; @@ -77,7 +85,7 @@ unsigned int vc_bell_pitch; /* Console bell pitch */ unsigned int vc_bell_duration; /* Console bell duration */ unsigned int vc_cursor_type; - struct vc_data **vc_display_fg; /* Ptr to var holding fg console for this display */ + struct vc_data **vc_display_fg; /* [!] Ptr to var holding fg console for this display */ /* additional information is in vt_kern.h */ }; diff -u --recursive --new-file v2.1.110/linux/include/linux/kd.h linux/include/linux/kd.h --- v2.1.110/linux/include/linux/kd.h Fri Feb 6 15:33:19 1998 +++ linux/include/linux/kd.h Tue Jul 21 10:28:23 1998 @@ -132,8 +132,26 @@ #define KDSIGACCEPT 0x4B4E /* accept kbd generated signals */ +#define KDFONTOP 0x4B72 /* font operations */ + +struct console_font_op { + unsigned int op; /* operation code KD_FONT_OP_* */ + unsigned int flags; /* KD_FONT_FLAG_* */ + unsigned int width, height; /* font size */ + unsigned int charcount; + unsigned char *data; /* font data with height fixed to 32 */ +}; + +#define KD_FONT_OP_SET 0 /* Set font */ +#define KD_FONT_OP_GET 1 /* Get font */ +#define KD_FONT_OP_SET_DEFAULT 2 /* Set font to default, data points to name / NULL */ +#define KD_FONT_OP_COPY 3 /* Copy from another console */ + +#define KD_FONT_FLAG_GLOBAL 1 /* Change on _all_ consoles */ +#define KD_FONT_FLAG_DONT_RECALC 2 /* Don't recalculate hw charcell size [compat] */ + /* note: 0x4B00-0x4B4E all have had a value at some time; don't reuse for the time being */ -/* note: 0x4B60-0x4B6D, 0x4B70, 0x4B71 used above */ +/* note: 0x4B60-0x4B6D, 0x4B70-0x4B72 used above */ #endif /* _LINUX_KD_H */ diff -u --recursive --new-file v2.1.110/linux/include/linux/pci.h linux/include/linux/pci.h --- v2.1.110/linux/include/linux/pci.h Tue Jul 21 00:15:33 1998 +++ linux/include/linux/pci.h Tue Jul 21 11:39:16 1998 @@ -572,6 +572,7 @@ #define PCI_DEVICE_ID_CMD_640 0x0640 #define PCI_DEVICE_ID_CMD_643 0x0643 #define PCI_DEVICE_ID_CMD_646 0x0646 +#define PCI_DEVICE_ID_CMD_647 0x0647 #define PCI_DEVICE_ID_CMD_670 0x0670 #define PCI_VENDOR_ID_VISION 0x1098 diff -u --recursive --new-file v2.1.110/linux/include/linux/radio.h linux/include/linux/radio.h --- v2.1.110/linux/include/linux/radio.h Tue Nov 4 10:23:25 1997 +++ linux/include/linux/radio.h Wed Dec 31 16:00:00 1969 @@ -1,134 +0,0 @@ -/* - * linux/radio.h - * - * Include for radio card support under linux - * Another pointless suid-binary removal utility... :-) - */ - -#ifndef _LINUX_RADIO_H -#define _LINUX_RADIO_H - -#include - -/* - * Constants - */ -/* Various types of Radio card... */ -/* (NB. I've made this a bit-field. It might make the difference one day.) */ -#define RADIO_TYPE_UNSUP 0x0000 -#define RADIO_TYPE_RTRACK 0x0001 /* AIMSlab RadioTrack (RadioReveal) card -- basic, to say the least */ -#define RADIO_TYPE_WINRADIO 0x0002 /* Dunno, but made by someone */ -#define RADIO_TYPE_TYPHOON 0x0004 /* It exists... */ - -/* waveband types */ -#define RADIO_PROTOCOL_AM 0x0010 /* AM "protocol" */ -#define RADIO_PROTOCOL_FM 0x0020 /* FM "protocol" */ -#define RADIO_PROTOCOL_SSB 0x0040 /* SSB */ -/* and no doubt some other stuff, too (Brian?) */ - - -/* the following are _very_ inaccurate; essentially, all that - * they do is provide a "name" for client programs - */ -#define RADIO_BAND_UNKNOWN 0x0000 /* other */ -#define RADIO_BAND_AM_SW 0x0100 /* short wave (?) */ -#define RADIO_BAND_AM_MW 0x0200 /* medium wave (540 - 1600) */ -#define RADIO_BAND_AM_LW 0x0400 /* long wave (150 - 270) */ -#define RADIO_BAND_FM_STD 0x1000 /* "standard" FM band (i.e. 88 - 108 or so) */ - - -/* Since floating-point stuff is illegal in the kernel, we use these - * pairs of macros to convert to, and from userland floats - * (I hope these are general enough!) - */ -/* Remember to make sure that all of these are integral... */ -/* Also remember to pass sensible things in here (MHz for FM, kHz for AM) */ -#define RADIO_FM_RES 100 /* 0.01 MHZ */ -#define RADIO_FM_FRTOINT(fl) ((int)(((float)(fl))*RADIO_FM_RES)) -#define RADIO_FM_INTTOFR(fr) ((float)(((int)(fr))/RADIO_FM_RES)) - -/* Old RadioTrack definitions -#define RADIO_FM_FRTOINT(fl) ((int)(((float)(fl)-88.0)*40)+0xf6c) -#define RADIO_FM_INTTOFR(fr) ((float)(((fr)-0xf6c)/40)+88.0) -*/ - -#define RADIO_AM_RES 1 /* 1 kHz */ -#define RADIO_AM_FRTOINT(fl) ((int)(((float)(fl))*RADIO_AM_RES)) -#define RADIO_AM_INTTOFR(fr) ((float)(((int)(fr))/RADIO_AM_RES)) - - -/* - * Structures - */ -/* query structures */ -struct radio_cap { - int dev_num; /* device index */ - int type; /* device type (see above) */ - int num_bwidths; /* number of "bandwidths" supported */ - int volmin, volmax; /* min/max in steps of one */ -}; - -struct radio_band { - int dev_num; /* device index (IN) */ - int index; /* "bandwidth" index (IN) */ - int proto; /* protocol (AM, FM, SSB, etc) (OUT) */ - int types; /* see RADIO_BAND_* above */ - int freqmin,freqmax; /* encoded according to the macros above */ - int strmin,strmax; /* min/max signal strength (steps of 1) */ -}; - -/* Previously, this was in four separate structures: - * radio_vol, radio_freq, radio_band and radio_sigstr, - * That was foolish, but now it's not so obvious what's going on. - * Be careful. - */ - -struct radio_ctl { - int dev_num; /* device index (IN) */ - int value; /* volume, frequency, band, sigstr */ -}; - - -/* - * ioctl numbers - */ -/* You have _how_ many radio devices? =) */ -#define RADIO_NUMDEVS _IOR(0x8c, 0x00, int) -#define RADIO_GETCAPS _IOR(0x8c, 0x01, struct radio_cap) -#define RADIO_GETBNDCAP _IOR(0x8c, 0x02, struct radio_band) - -#define RADIO_SETVOL _IOW(0x8c, 0x10, struct radio_ctl) -#define RADIO_GETVOL _IOR(0x8c, 0x11, struct radio_ctl) -#define RADIO_SETBAND _IOW(0x8c, 0x12, struct radio_ctl) -#define RADIO_GETBAND _IOR(0x8c, 0x13, struct radio_ctl) -#define RADIO_SETFREQ _IOW(0x8c, 0x14, struct radio_ctl) -#define RADIO_GETFREQ _IOR(0x8c, 0x15, struct radio_ctl) - -#define RADIO_GETSIGSTR _IOR(0x8c, 0x30, struct radio_ctl) - -/* kernel specific stuff... */ -#ifdef __KERNEL__ -/* Try to keep the number of function pointers to a minimum. - * Devices are responsible for updating, or otherwise, the - * variables here, not the outside wrapper. - */ -struct radio_device; - -int radio_add_device(struct radio_device *newdev); - -struct radio_device { - struct radio_cap *cap; - struct radio_band *bands; /* pointer to array of radio_bands */ - int (*setvol)(struct radio_device*,int); - int curvol; - int (*setband)(struct radio_device*,int); - int curband; - int (*setfreq)(struct radio_device*,int); - int curfreq; - int (*getsigstr)(struct radio_device*); - struct radio_device *next; - void *misc; /* device internal storage... (eg i/o addresses, etc */ -}; -#endif /* __KERNEL__ */ - -#endif /* _LINUX_RADIO_H */ diff -u --recursive --new-file v2.1.110/linux/include/linux/selection.h linux/include/linux/selection.h --- v2.1.110/linux/include/linux/selection.h Thu Jul 16 18:09:29 1998 +++ linux/include/linux/selection.h Tue Jul 21 10:52:32 1998 @@ -33,8 +33,7 @@ extern void do_unblank_screen(void); extern unsigned short *screen_pos(int currcons, int w_offset, int viewed); -extern unsigned short screen_word(int currcons, int offset, int viewed); -extern int scrw2glyph(unsigned short scr_word); +extern u16 screen_glyph(int currcons, int offset); extern void complement_pos(int currcons, int offset); extern void invert_screen(int currcons, int offset, int count, int shift); diff -u --recursive --new-file v2.1.110/linux/include/linux/videodev.h linux/include/linux/videodev.h --- v2.1.110/linux/include/linux/videodev.h Tue Jul 21 00:15:33 1998 +++ linux/include/linux/videodev.h Tue Jul 21 11:39:16 1998 @@ -106,6 +106,9 @@ #define VIDEO_PALETTE_RGB32 5 /* 32bit RGB */ #define VIDEO_PALETTE_RGB555 6 /* 555 15bit RGB */ #define VIDEO_PALETTE_YUV422 7 /* YUV422 capture */ +#define VIDEO_PALETTE_YUYV 8 +#define VIDEO_PALETTE_UYVY 9 /* The great thing about standards is ... */ +#define VIDEO_PALETTE_YUV420 10 }; struct video_audio @@ -201,6 +204,7 @@ #define VID_HARDWARE_RTRACK 9 #define VID_HARDWARE_ZOLTRIX 10 #define VID_HARDWARE_SAA7146 11 +#define VID_HARDWARE_VIDEUM 12 /* Reserved for Winnov videum */ /* * Initialiser list diff -u --recursive --new-file v2.1.110/linux/include/linux/vt_buffer.h linux/include/linux/vt_buffer.h --- v2.1.110/linux/include/linux/vt_buffer.h Thu Jul 16 18:09:30 1998 +++ linux/include/linux/vt_buffer.h Tue Jul 21 10:52:32 1998 @@ -26,7 +26,9 @@ #define scr_writew(val, addr) (*(addr) = (val)) #define scr_readw(addr) (*(addr)) #define scr_memcpyw(d, s, c) memcpy(d, s, c) +#define scr_memmovew(d, s, c) memmove(d, s, c) #define VT_BUF_HAVE_MEMCPYW +#define VT_BUF_HAVE_MEMMOVEW #define scr_memcpyw_from(d, s, c) memcpy(d, s, c) #define scr_memcpyw_to(d, s, c) memcpy(d, s, c) #define VT_BUF_HAVE_MEMCPYF @@ -50,6 +52,21 @@ } #endif +#ifndef VT_BUF_HAVE_MEMMOVEW +extern inline void scr_memmovew(u16 *d, u16 *s, unsigned int count) +{ + if (d < s) + scr_memcpyw(d, s, count); + else { + count /= 2; + d += count; + s += count; + while (count--) + scr_writew(scr_readw(--s), --d); + } +} +#endif + #ifndef VT_BUF_HAVE_MEMCPYF extern inline void scr_memcpyw_from(u16 *d, u16 *s, unsigned int count) { @@ -65,13 +82,5 @@ scr_writew(*s++, d++); } #endif - -#define reverse_video_char(a) (((a) & 0x88) | ((((a) >> 4) | ((a) << 4)) & 0x77)) -#define reverse_video_short(a) (((a) & 0x88ff) | \ - (((a) & 0x7000) >> 4) | (((a) & 0x0700) << 4)) -/* this latter line used to have masks 0xf000 and 0x0f00, but selection - requires a self-inverse operation; moreover, the old version looks wrong */ -#define reverse_video_short_mono(a) ((a) ^ 0x800) -#define complement_video_short(a) ((a) ^ (can_do_color ? 0x7700 : 0x800)) #endif diff -u --recursive --new-file v2.1.110/linux/include/linux/vt_kern.h linux/include/linux/vt_kern.h --- v2.1.110/linux/include/linux/vt_kern.h Tue Jul 21 00:15:33 1998 +++ linux/include/linux/vt_kern.h Tue Jul 21 10:28:23 1998 @@ -21,11 +21,6 @@ extern struct vt_struct { int vc_num; /* The console number */ unsigned char vc_mode; /* KD_TEXT, ... */ -#if 0 /* FIXME: Does anyone use these? */ - unsigned char vc_kbdraw; - unsigned char vc_kbde0; - unsigned char vc_kbdleds; -#endif struct vt_mode vt_mode; int vt_pid; int vt_newvt; @@ -36,6 +31,8 @@ /* console.c */ +struct console_font_op; + int vc_allocate(unsigned int console, int init); int vc_cons_allocated(unsigned int console); int vc_resize(unsigned int lines, unsigned int cols, @@ -50,12 +47,12 @@ void reset_palette(int currcons); void set_palette(void); void do_blank_screen(int nopowersave); -int con_set_font(char * fontmap, int w, int h, int chars); -int con_get_font(char * fontmap, int *w, int *h, int *chars); +int con_font_op(int currcons, struct console_font_op *op); int con_set_cmap(unsigned char *cmap); int con_get_cmap(unsigned char *cmap); void scrollback(int); void scrollfront(int); +void update_region(int currcons, unsigned long start, int count); struct tty_struct; int tioclinux(struct tty_struct *tty, unsigned long arg); @@ -76,7 +73,6 @@ /* vt.c */ -extern unsigned int video_mode_512ch; extern unsigned int video_font_height; extern unsigned int default_font_height; extern unsigned int video_scan_lines; diff -u --recursive --new-file v2.1.110/linux/init/main.c linux/init/main.c --- v2.1.110/linux/init/main.c Tue Jul 21 00:15:33 1998 +++ linux/init/main.c Tue Jul 21 10:28:23 1998 @@ -88,9 +88,7 @@ #ifdef __i386__ extern void ioapic_pirq_setup(char *str, int *ints); #endif -#ifdef CONFIG_VGA_CONSOLE extern void no_scroll(char *str, int *ints); -#endif extern void kbd_reset_setup(char *str, int *ints); extern void panic_setup(char *str, int *ints); extern void bmouse_setup(char *str, int *ints); @@ -767,15 +765,14 @@ #ifdef CONFIG_HFMODEM { "hfmodem=", hfmodem_setup }, #endif -#ifdef CONFIG_PMAC_CONSOLE - { "console=", pmac_cons_setup }, - { "vmode=", pmac_vmode_setup }, -#endif #ifdef CONFIG_FTAPE { "ftape=", ftape_setup}, #endif #ifdef CONFIG_MD_BOOT { "md=", md_setup}, +#endif +#ifdef CONFIG_MACMOUSE + { "adb_buttons=", adb_mouse_setup }, #endif { 0, 0 } };