svn: head/sys: conf dev/vt dev/vt/logo
Maxim Sobolev
sobomax at FreeBSD.org
Fri Jul 24 06:20:19 UTC 2015
Oh my! But in the past we've used to have splash so why not?
I am just curious if someone if working on libvgl support in the vt?
I think the graphics should go into loadable module, though. So it's easy
to change or amend.
-Max
On Tue, Jul 21, 2015 at 1:33 PM, Conrad E. Meyer <cem at freebsd.org> wrote:
> Author: cem
> Date: Tue Jul 21 20:33:36 2015
> New Revision: 285766
> URL: https://svnweb.freebsd.org/changeset/base/285766
>
> Log:
> vt: Draw logos per CPU core
>
> This feature is inspired by another Unix-alike OS commonly found on
> airplane headrests.
>
> A number of beasties[0] are drawn at top of framebuffer during boot,
> based on the number of active SMP CPUs[1]. Console buffer output
> continues to scroll in the screen area below beastie(s)[2].
>
> After some time[3] has passed, the beasties are erased leaving the
> entire terminal for use.
>
> Includes two 80x80 vga16 beastie graphics and an 80x80 vga16 orb
> graphic. (The graphics are RLE compressed to save some space -- 3x 3200
> bytes uncompressed, or 4208 compressed.)
>
> [0]: The user may select the style of beastie with
>
> kern.vt.splash_cpu_style=(0|1|2)
>
> [1]: Or the number may be overridden with tunable kern.vt.splash_ncpu.
> [2]: https://www.youtube.com/watch?v=UP2jizfr3_o
> [3]: Configurable with kern.vt.splash_cpu_duration (seconds, def. 10).
>
> Differential Revision: https://reviews.freebsd.org/D2181
> Reviewed by: dumbbell, emaste
> Approved by: markj (mentor)
> MFC after: 2 weeks
>
> Added:
> head/sys/dev/vt/logo/logo_beastie.c (contents, props changed)
> head/sys/dev/vt/vt_cpulogos.c (contents, props changed)
> Modified:
> head/sys/conf/files
> head/sys/dev/vt/vt.h
> head/sys/dev/vt/vt_core.c
>
> Modified: head/sys/conf/files
>
> ==============================================================================
> --- head/sys/conf/files Tue Jul 21 20:30:06 2015 (r285765)
> +++ head/sys/conf/files Tue Jul 21 20:33:36 2015 (r285766)
> @@ -2726,9 +2726,11 @@ dev/vt/hw/efifb/efifb.c optional vt_efi
> dev/vt/hw/fb/vt_fb.c optional vt
> dev/vt/hw/vga/vt_vga.c optional vt vt_vga
> dev/vt/logo/logo_freebsd.c optional vt splash
> +dev/vt/logo/logo_beastie.c optional vt splash
> dev/vt/vt_buf.c optional vt
> dev/vt/vt_consolectl.c optional vt
> dev/vt/vt_core.c optional vt
> +dev/vt/vt_cpulogos.c optional vt splash
> dev/vt/vt_font.c optional vt
> dev/vt/vt_sysmouse.c optional vt
> dev/vte/if_vte.c optional vte pci
>
> Added: head/sys/dev/vt/logo/logo_beastie.c
>
> ==============================================================================
> --- /dev/null 00:00:00 1970 (empty, because file is newly added)
> +++ head/sys/dev/vt/logo/logo_beastie.c Tue Jul 21 20:33:36 2015
> (r285766)
> @@ -0,0 +1,398 @@
> +/*-
> + * Copyright (c) 2015 Conrad Meyer <cse.cem at gmail.com>
> + * Copyright (c) 2005 The FreeBSD Foundation
> + * Copyright (c) 1996 Larry Ewing <lewing at isc.tamu.edu>
> + * Copyright (c) 1988 Kirk McKusick <mckusick at FreeBSD.org>
> + *
> + * All rights reserved.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
> WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + */
> +
> +#include <sys/cdefs.h>
> +__FBSDID("$FreeBSD$");
> +
> +#include <dev/vt/vt.h>
> +
> +const unsigned int vt_logo_sprite_width = 80;
> +const unsigned int vt_logo_sprite_height = 80;
> +
> +const unsigned char vt_beastie_vga16[] = {
> + 0x16, 0x00, 0x62, 0x16, 0x88, 0x03, 0x80, 0x16, 0x00, 0x23, 0x88,
> 0x80,
> + 0x00, 0x00, 0x08, 0x88, 0x16, 0x00, 0x21, 0x08, 0x16, 0x00, 0x06,
> 0x88,
> + 0x16, 0x00, 0x20, 0x80, 0x16, 0x00, 0x06, 0x08, 0x80, 0x16, 0x00,
> 0x1e,
> + 0x08, 0x16, 0x00, 0x08, 0x88, 0x16, 0x00, 0x1e, 0x08, 0x16, 0x00,
> 0x06,
> + 0x87, 0x00, 0x08, 0x16, 0x00, 0x1e, 0x80, 0x16, 0x00, 0x06, 0x77,
> 0x80,
> + 0x00, 0x80, 0x16, 0x00, 0x1d, 0x80, 0x16, 0x00, 0x06, 0x08, 0x00,
> 0x00,
> + 0x08, 0x16, 0x00, 0x1d, 0x80, 0x16, 0x00, 0x09, 0x08, 0x16, 0x00,
> 0x1c,
> + 0x08, 0x16, 0x00, 0x0a, 0x08, 0x16, 0x00, 0x1c, 0x08, 0x16, 0x00,
> 0x0b,
> + 0x80, 0x16, 0x00, 0x1b, 0x08, 0x16, 0x00, 0x0b, 0x80, 0x16, 0x00,
> 0x1b,
> + 0x08, 0x00, 0x08, 0x70, 0x16, 0x00, 0x03, 0x77, 0x70, 0x16, 0x00,
> 0x03,
> + 0x80, 0x16, 0x00, 0x1b, 0x08, 0x00, 0x87, 0x77, 0x00, 0x00, 0x07,
> 0xff,
> + 0xf7, 0x16, 0x00, 0x03, 0x80, 0x16, 0x00, 0x1b, 0x08, 0x08, 0x77,
> 0xff,
> + 0x00, 0x00, 0x7f, 0x77, 0xf7, 0x16, 0x00, 0x03, 0x80, 0x16, 0x00,
> 0x1b,
> + 0x08, 0x08, 0x70, 0x0f, 0x80, 0x00, 0xf7, 0x08, 0x7f, 0x70, 0x00,
> 0x00,
> + 0x80, 0x16, 0x00, 0x1b, 0x08, 0x08, 0x80, 0x07, 0x80, 0x00, 0xf8,
> 0x00,
> + 0x8f, 0x70, 0x00, 0x00, 0x80, 0x16, 0x00, 0x1b, 0x08, 0x08, 0x70,
> 0x07,
> + 0x88, 0x88, 0xf8, 0x00, 0x8f, 0x70, 0x00, 0x00, 0x80, 0x16, 0x00,
> 0x1b,
> + 0x08, 0x00, 0xf0, 0x06, 0x16, 0xe6, 0x03, 0x00, 0x8f, 0x16, 0x00,
> 0x03,
> + 0x80, 0x16, 0x00, 0x1b, 0x08, 0x00, 0x77, 0x16, 0x6e, 0x05, 0x77,
> 0x16,
> + 0x00, 0x03, 0x80, 0x16, 0x00, 0x1b, 0x08, 0x00, 0x06, 0x16, 0xe6,
> 0x06,
> + 0x16, 0x00, 0x03, 0x80, 0x16, 0x00, 0x1b, 0x08, 0x00, 0x16, 0x6e,
> 0x07,
> + 0x60, 0x00, 0x00, 0x08, 0x16, 0x00, 0x1b, 0x08, 0x80, 0x16, 0xe6,
> 0x07,
> + 0x60, 0x00, 0x00, 0x08, 0x16, 0x00, 0x1b, 0x08, 0x80, 0x16, 0x6e,
> 0x05,
> + 0x66, 0x66, 0x80, 0x08, 0x00, 0x00, 0x80, 0x16, 0x00, 0x1a, 0x08,
> 0x80,
> + 0x86, 0x16, 0xe6, 0x03, 0x16, 0x66, 0x03, 0x80, 0x08, 0x78, 0x00,
> 0x80,
> + 0x16, 0x00, 0x1a, 0x08, 0x80, 0x86, 0x16, 0x66, 0x05, 0x77, 0x70,
> 0x00,
> + 0x77, 0x00, 0x08, 0x16, 0x00, 0x1a, 0x08, 0x00, 0x87, 0x16, 0x66,
> 0x04,
> + 0x77, 0x77, 0x78, 0x00, 0x88, 0x00, 0x08, 0x16, 0x00, 0x1a, 0x08,
> 0x00,
> + 0x87, 0x76, 0x66, 0x66, 0x77, 0x77, 0xff, 0xf7, 0x16, 0x00, 0x03,
> 0x08,
> + 0x16, 0x00, 0x1a, 0x80, 0x08, 0xff, 0x16, 0x77, 0x04, 0x16, 0xff,
> 0x03,
> + 0x80, 0x16, 0x00, 0x03, 0x80, 0x16, 0x00, 0x19, 0x80, 0x07, 0xff,
> 0x16,
> + 0x77, 0x03, 0x7f, 0x16, 0xff, 0x03, 0x70, 0x16, 0x00, 0x03, 0x80,
> 0x16,
> + 0x00, 0x18, 0x08, 0x00, 0x8f, 0xff, 0xf7, 0x77, 0x77, 0x16, 0xff,
> 0x04,
> + 0xf0, 0x16, 0x00, 0x03, 0x08, 0x16, 0x00, 0x18, 0x80, 0x08, 0x7f,
> 0x16,
> + 0xff, 0x08, 0xf8, 0x16, 0x00, 0x04, 0x80, 0x16, 0x00, 0x16, 0x08,
> 0x00,
> + 0x08, 0x16, 0xff, 0x09, 0xf7, 0x16, 0x00, 0x04, 0x08, 0x16, 0x00,
> 0x16,
> + 0x08, 0x00, 0x08, 0x16, 0xff, 0x0a, 0x16, 0x00, 0x05, 0x80, 0x16,
> 0x00,
> + 0x15, 0x80, 0x00, 0x87, 0x16, 0xff, 0x0a, 0x80, 0x16, 0x00, 0x04,
> 0x08,
> + 0x16, 0x00, 0x14, 0x08, 0x00, 0x00, 0x87, 0x77, 0xff, 0xf7, 0x77,
> 0x16,
> + 0xff, 0x03, 0x16, 0x77, 0x03, 0x78, 0x16, 0x00, 0x04, 0x08, 0x16,
> 0x00,
> + 0x14, 0x08, 0x00, 0x00, 0x77, 0x7f, 0xff, 0xff, 0x7f, 0x16, 0xff,
> 0x04,
> + 0x77, 0x77, 0x78, 0x00, 0x80, 0x16, 0x00, 0x03, 0x80, 0x16, 0x00,
> 0x13,
> + 0x80, 0x00, 0x00, 0x7f, 0x16, 0xff, 0x09, 0xf7, 0x77, 0x00, 0x08,
> 0x80,
> + 0x00, 0x00, 0x80, 0x16, 0x00, 0x13, 0x80, 0x80, 0x08, 0x16, 0xff,
> 0x0b,
> + 0x77, 0x80, 0x00, 0x08, 0x00, 0x00, 0x08, 0x16, 0x00, 0x12, 0x08,
> 0x00,
> + 0x80, 0x07, 0x16, 0xff, 0x0c, 0x78, 0x00, 0x08, 0x80, 0x00, 0x08,
> 0x16,
> + 0x00, 0x12, 0x08, 0x08, 0x00, 0x8f, 0x16, 0xff, 0x0c, 0xf7, 0x08,
> 0x80,
> + 0x80, 0x00, 0x08, 0x16, 0x00, 0x12, 0x16, 0x08, 0x03, 0x7f, 0x16,
> 0xff,
> + 0x0c, 0xf7, 0x08, 0x80, 0x80, 0x00, 0x00, 0x80, 0x16, 0x00, 0x11,
> 0x80,
> + 0x08, 0x07, 0x16, 0xff, 0x0e, 0x80, 0x00, 0x08, 0x00, 0x00, 0x80,
> 0x16,
> + 0x00, 0x11, 0x80, 0x80, 0x0f, 0x16, 0xff, 0x0e, 0x70, 0x00, 0x08,
> 0x00,
> + 0x00, 0x80, 0x16, 0x00, 0x10, 0x08, 0x00, 0x80, 0x8f, 0x16, 0xff,
> 0x0e,
> + 0x70, 0x00, 0x08, 0x00, 0x00, 0x80, 0x16, 0x00, 0x10, 0x08, 0x08,
> 0x00,
> + 0x7f, 0x16, 0xff, 0x0e, 0x70, 0x00, 0x08, 0x00, 0x00, 0x08, 0x16,
> 0x00,
> + 0x10, 0x80, 0x08, 0x00, 0x16, 0xff, 0x05, 0x7f, 0x16, 0xff, 0x09,
> 0xf0,
> + 0x00, 0x08, 0x00, 0x00, 0x08, 0x16, 0x00, 0x0f, 0x08, 0x00, 0x08,
> 0x00,
> + 0x16, 0xff, 0x05, 0x7f, 0x16, 0xff, 0x09, 0xf0, 0x00, 0x08, 0x00,
> 0x00,
> + 0x08, 0x16, 0x00, 0x0f, 0x08, 0x00, 0x08, 0x08, 0x16, 0xff, 0x05,
> 0x7f,
> + 0x16, 0xff, 0x09, 0xf0, 0x00, 0x08, 0x00, 0x00, 0x08, 0x16, 0x00,
> 0x0f,
> + 0x08, 0x00, 0x08, 0x08, 0x16, 0xff, 0x05, 0x7f, 0x16, 0xff, 0x09,
> 0xf0,
> + 0x00, 0x08, 0x00, 0x00, 0x08, 0x16, 0x00, 0x0f, 0x08, 0x00, 0x00,
> 0x88,
> + 0x16, 0xff, 0x05, 0x7f, 0x16, 0xff, 0x09, 0xf0, 0x00, 0x08, 0x00,
> 0x00,
> + 0x08, 0x16, 0x00, 0x0f, 0x08, 0x00, 0x00, 0x08, 0x16, 0xff, 0x05,
> 0x7f,
> + 0x16, 0xff, 0x09, 0xf0, 0x88, 0x88, 0x80, 0x00, 0x08, 0x16, 0x00,
> 0x0f,
> + 0x08, 0x06, 0xe6, 0x00, 0x8f, 0x16, 0xff, 0x04, 0x7f, 0x16, 0xff,
> 0x09,
> + 0xf8, 0x00, 0x00, 0x08, 0x80, 0x08, 0x16, 0x00, 0x10, 0x6e, 0x6e,
> 0x60,
> + 0x08, 0x16, 0xff, 0x04, 0x7f, 0x16, 0xff, 0x08, 0xe6, 0xe0, 0x16,
> 0x00,
> + 0x03, 0x88, 0x80, 0x16, 0x00, 0x0f, 0x06, 0x16, 0xe6, 0x03, 0x00,
> 0x8f,
> + 0x16, 0xff, 0x0b, 0xfe, 0x6e, 0x60, 0x16, 0x00, 0x04, 0x60, 0x16,
> 0x00,
> + 0x0f, 0x16, 0x6e, 0x04, 0x60, 0x08, 0x16, 0xff, 0x0b, 0xf6, 0xe6,
> 0xe0,
> + 0x16, 0x00, 0x03, 0x06, 0xe6, 0x16, 0x00, 0x0c, 0x06, 0x16, 0xe6,
> 0x06,
> + 0xe0, 0x00, 0x8f, 0x16, 0xff, 0x0a, 0xfe, 0x6e, 0x60, 0x16, 0x00,
> 0x03,
> + 0x0e, 0x6e, 0x16, 0x00, 0x0c, 0x16, 0x6e, 0x08, 0x00, 0x08, 0x16,
> 0xff,
> + 0x0a, 0x76, 0xe6, 0xe6, 0x16, 0x00, 0x03, 0xe6, 0xe6, 0x16, 0x00,
> 0x0c,
> + 0x16, 0xe6, 0x08, 0xe0, 0x00, 0x8f, 0x16, 0xff, 0x08, 0xf7, 0x7e,
> 0x16,
> + 0x6e, 0x07, 0x16, 0x00, 0x0c, 0x16, 0x6e, 0x08, 0x60, 0x00, 0x08,
> 0x16,
> + 0xff, 0x08, 0xf7, 0x76, 0x16, 0xe6, 0x07, 0xe0, 0x16, 0x00, 0x0b,
> 0x16,
> + 0xe6, 0x09, 0x00, 0x00, 0x0f, 0x16, 0xff, 0x07, 0xf7, 0x7e, 0x16,
> 0x6e,
> + 0x08, 0x16, 0x00, 0x0b, 0x16, 0x6e, 0x09, 0x60, 0x00, 0x0f, 0x16,
> 0xff,
> + 0x07, 0xf7, 0x76, 0x16, 0xe6, 0x08, 0xe0, 0x16, 0x00, 0x0a, 0x16,
> 0xe6,
> + 0x09, 0xe0, 0x00, 0x8f, 0x16, 0xff, 0x07, 0xf7, 0x8e, 0x16, 0x6e,
> 0x09,
> + 0x16, 0x00, 0x0a, 0x16, 0x6e, 0x0a, 0x88, 0x16, 0xff, 0x08, 0x78,
> 0x86,
> + 0x16, 0xe6, 0x0a, 0x16, 0x00, 0x09, 0x16, 0xe6, 0x0a, 0xef, 0x16,
> 0xff,
> + 0x07, 0xf7, 0x80, 0x06, 0x16, 0x6e, 0x0a, 0x16, 0x00, 0x09, 0x16,
> 0x6e,
> + 0x0b, 0x16, 0xff, 0x07, 0x78, 0x00, 0x06, 0x16, 0xe6, 0x09, 0xe0,
> 0x16,
> + 0x00, 0x09, 0x16, 0xe6, 0x0b, 0x7f, 0x16, 0xff, 0x05, 0x78, 0x80,
> 0x00,
> + 0x06, 0x16, 0x6e, 0x09, 0x16, 0x00, 0x09, 0x0e, 0x16, 0x6e, 0x0a,
> 0x66,
> + 0x67, 0x16, 0xff, 0x04, 0x78, 0x80, 0x00, 0x00, 0x86, 0x16, 0xe6,
> 0x08,
> + 0xe0, 0x16, 0x00, 0x09, 0x06, 0x16, 0xe6, 0x0b, 0x60, 0x16, 0x00,
> 0x08,
> + 0x86, 0x16, 0x6e, 0x06, 0x66, 0x60, 0x16, 0x00, 0x0a, 0x0e, 0x16,
> 0x6e,
> + 0x0a, 0x66, 0x60, 0x16, 0x00, 0x08, 0x86, 0x16, 0xe6, 0x06, 0x60,
> 0x16,
> + 0x00, 0x0c, 0x16, 0xe6, 0x0b, 0x60, 0x16, 0x00, 0x08, 0x86, 0x16,
> 0x6e,
> + 0x04, 0x66, 0x66, 0x16, 0x00, 0x0f, 0x16, 0x66, 0x03, 0x16, 0x6e,
> 0x05,
> + 0x66, 0x60, 0x00, 0x16, 0x88, 0x05, 0x80, 0x00, 0x06, 0x66, 0x16,
> 0xe6,
> + 0x03, 0x66, 0x16, 0x00, 0x12, 0x16, 0x66, 0x04, 0xe6, 0xe6, 0x66,
> 0x88,
> + 0x88, 0x16, 0x00, 0x05, 0x08, 0x88, 0x86, 0x66, 0x6e, 0x6e, 0x66,
> 0x60,
> + 0x16, 0x00, 0x14, 0x06, 0x16, 0x66, 0x04, 0x16, 0x00, 0x09, 0x06,
> 0x16,
> + 0x66, 0x04, 0x16, 0x00, 0x16, 0x06, 0x66, 0x66, 0x60, 0x16, 0x00,
> 0x0a,
> + 0x16, 0x66, 0x03, 0x60, 0x16, 0x00, 0x82
> +};
> +
> +const unsigned char vt_beastie2_vga16[] = {
> + 0x16, 0x00, 0x11, 0x04, 0x16, 0x00, 0x26, 0x04, 0x44, 0x16, 0x00,
> 0x26,
> + 0x44, 0x40, 0x16, 0x00, 0x25, 0x44, 0x44, 0x16, 0x00, 0x0b, 0x44,
> 0x16,
> + 0x00, 0x19, 0x04, 0x44, 0x40, 0x16, 0x00, 0x0b, 0x04, 0x40, 0x16,
> 0x00,
> + 0x18, 0x44, 0x44, 0x40, 0x16, 0x00, 0x0b, 0x04, 0x44, 0x16, 0x00,
> 0x17,
> + 0x04, 0x44, 0x44, 0x16, 0x00, 0x0d, 0x44, 0x40, 0x16, 0x00, 0x16,
> 0x16,
> + 0x44, 0x03, 0x16, 0x00, 0x03, 0x04, 0x04, 0x16, 0x00, 0x08, 0x44,
> 0x44,
> + 0x16, 0x00, 0x16, 0x16, 0x44, 0x03, 0x00, 0x04, 0x16, 0x44, 0x05,
> 0x16,
> + 0x00, 0x06, 0x44, 0x44, 0x16, 0x00, 0x15, 0x04, 0x44, 0x44, 0x40,
> 0x40,
> + 0x16, 0x44, 0x07, 0x40, 0x16, 0x00, 0x04, 0x44, 0x44, 0x40, 0x16,
> 0x00,
> + 0x14, 0x04, 0x16, 0x44, 0x06, 0x04, 0x04, 0x16, 0x44, 0x03, 0x04,
> 0x16,
> + 0x00, 0x03, 0x04, 0x44, 0x44, 0x40, 0x16, 0x00, 0x14, 0x04, 0x16,
> 0x44,
> + 0x07, 0x40, 0x16, 0x44, 0x04, 0x40, 0x00, 0x00, 0x16, 0x44, 0x03,
> 0x40,
> + 0x16, 0x00, 0x14, 0x04, 0x16, 0x44, 0x03, 0x84, 0x16, 0x44, 0x04,
> 0x04,
> + 0x16, 0x44, 0x04, 0x04, 0x16, 0x44, 0x04, 0x40, 0x16, 0x00, 0x14,
> 0x04,
> + 0x44, 0x44, 0x0f, 0xf8, 0x44, 0x48, 0x84, 0x16, 0x44, 0x0b, 0x40,
> 0x16,
> + 0x00, 0x14, 0x04, 0x44, 0x40, 0xff, 0xf8, 0x40, 0xff, 0xff, 0x16,
> 0x44,
> + 0x0b, 0x40, 0x16, 0x00, 0x14, 0x04, 0x44, 0x0f, 0xff, 0x74, 0x47,
> 0xff,
> + 0xff, 0x74, 0x16, 0x44, 0x0a, 0x40, 0x16, 0x00, 0x14, 0x04, 0x04,
> 0xff,
> + 0xff, 0x44, 0x7f, 0xff, 0xff, 0xf4, 0x16, 0x44, 0x0a, 0x16, 0x00,
> 0x15,
> + 0x04, 0x48, 0xff, 0xf7, 0x40, 0x16, 0xff, 0x03, 0xf6, 0x16, 0x44,
> 0x0a,
> + 0x16, 0x00, 0x16, 0x4f, 0xff, 0xf8, 0x47, 0x16, 0xff, 0x03, 0xf8,
> 0x16,
> + 0x44, 0x09, 0x40, 0x16, 0x00, 0x16, 0x07, 0x07, 0xf8, 0x0f, 0x16,
> 0xff,
> + 0x03, 0xf8, 0x16, 0x44, 0x08, 0x40, 0x40, 0x16, 0x00, 0x15, 0x04,
> 0x77,
> + 0x80, 0xf4, 0x78, 0x0f, 0xff, 0xff, 0xf8, 0x16, 0x44, 0x09, 0x16,
> 0x00,
> + 0x16, 0x04, 0x8f, 0x00, 0xf0, 0x8f, 0x88, 0xff, 0xff, 0xf8, 0x16,
> 0x44,
> + 0x08, 0x16, 0x00, 0x17, 0x04, 0x00, 0x00, 0x88, 0x0f, 0x00, 0xff,
> 0xff,
> + 0xf6, 0x16, 0x44, 0x07, 0x40, 0x16, 0x00, 0x17, 0x40, 0x00, 0x00,
> 0x48,
> + 0x07, 0x00, 0xff, 0xff, 0xf4, 0x16, 0x44, 0x06, 0x40, 0x16, 0x00,
> 0x18,
> + 0x44, 0x80, 0x08, 0x48, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x16, 0x44,
> 0x06,
> + 0x16, 0x00, 0x18, 0x04, 0x44, 0x40, 0x04, 0x48, 0x00, 0x00, 0xff,
> 0xff,
> + 0x84, 0x16, 0x44, 0x06, 0x40, 0x16, 0x00, 0x17, 0x44, 0x44, 0x04,
> 0x00,
> + 0x48, 0x00, 0x07, 0xff, 0xff, 0x16, 0x44, 0x07, 0x40, 0x16, 0x00,
> 0x17,
> + 0x44, 0x40, 0x16, 0x44, 0x03, 0xf7, 0xff, 0xff, 0xf0, 0x16, 0x44,
> 0x07,
> + 0x40, 0x16, 0x00, 0x16, 0x04, 0x44, 0x40, 0x44, 0x44, 0x40, 0x0f,
> 0xff,
> + 0xf7, 0x00, 0x16, 0x44, 0x07, 0x40, 0x16, 0x00, 0x14, 0x6e, 0x00,
> 0x04,
> + 0x16, 0x44, 0x05, 0x40, 0x40, 0x16, 0x44, 0x08, 0x40, 0x40, 0x16,
> 0x00,
> + 0x14, 0x0e, 0xe0, 0x00, 0x44, 0x44, 0x04, 0x16, 0x44, 0x0d, 0x16,
> 0x00,
> + 0x15, 0x06, 0x66, 0x00, 0x16, 0x44, 0x03, 0x16, 0x40, 0x03, 0x16,
> 0x44,
> + 0x09, 0x04, 0x16, 0x00, 0x13, 0x60, 0x00, 0x00, 0x06, 0x60, 0x44,
> 0x44,
> + 0x04, 0x16, 0x44, 0x0c, 0x40, 0x16, 0x00, 0x13, 0x0e, 0xe0, 0x00,
> 0x00,
> + 0xe0, 0x04, 0x44, 0x40, 0x16, 0x44, 0x0b, 0x40, 0x40, 0x16, 0x00,
> 0x13,
> + 0x06, 0xee, 0x00, 0x00, 0xe0, 0x00, 0x04, 0x16, 0x44, 0x07, 0x40,
> 0x40,
> + 0x16, 0x44, 0x04, 0x16, 0x00, 0x14, 0x06, 0x06, 0xe6, 0x00, 0xe0,
> 0x00,
> + 0x00, 0x04, 0x04, 0x16, 0x44, 0x04, 0x40, 0x16, 0x44, 0x05, 0x16,
> 0x00,
> + 0x17, 0x6e, 0x6e, 0x60, 0x16, 0x00, 0x04, 0x16, 0x44, 0x03, 0x40,
> 0x16,
> + 0x44, 0x04, 0x40, 0x40, 0x16, 0x00, 0x13, 0x68, 0x60, 0x00, 0x00,
> 0x06,
> + 0xee, 0x60, 0x16, 0x00, 0x05, 0x40, 0x40, 0x16, 0x44, 0x03, 0x04,
> 0x16,
> + 0x00, 0x16, 0x0e, 0xe0, 0x00, 0x00, 0x6e, 0xe6, 0xe6, 0x04, 0x44,
> 0x44,
> + 0x00, 0x00, 0x16, 0x44, 0x04, 0x04, 0x44, 0x40, 0x40, 0x16, 0x00,
> 0x15,
> + 0x6e, 0x66, 0x6e, 0xe6, 0x66, 0xee, 0x04, 0x44, 0x44, 0x16, 0x00,
> 0x03,
> + 0x16, 0x40, 0x03, 0x44, 0x44, 0x40, 0x16, 0x00, 0x16, 0x06, 0x6e,
> 0xee,
> + 0x68, 0x00, 0x0e, 0x64, 0x44, 0x44, 0x16, 0x00, 0x03, 0x16, 0x44,
> 0x06,
> + 0x04, 0x16, 0x00, 0x1b, 0x60, 0x44, 0x40, 0x16, 0x00, 0x03, 0x16,
> 0x44,
> + 0x06, 0x40, 0x16, 0x00, 0x1a, 0x04, 0x44, 0x40, 0x16, 0x00, 0x03,
> 0x04,
> + 0x16, 0x44, 0x06, 0x04, 0x16, 0x00, 0x1a, 0x04, 0x16, 0x44, 0x05,
> 0x04,
> + 0x16, 0x44, 0x06, 0x40, 0x16, 0x00, 0x1a, 0x04, 0x16, 0x44, 0x04,
> 0x04,
> + 0x04, 0x44, 0x04, 0x16, 0x44, 0x03, 0x04, 0x40, 0x40, 0x16, 0x00,
> 0x19,
> + 0x04, 0x44, 0x44, 0x04, 0x40, 0x44, 0x04, 0x44, 0x44, 0x04, 0x44,
> 0x40,
> + 0x44, 0x44, 0x16, 0x00, 0x1b, 0x04, 0x40, 0x44, 0x04, 0x16, 0x44,
> 0x04,
> + 0x40, 0x40, 0x44, 0x44, 0x40, 0x40, 0x16, 0x00, 0x1a, 0x04, 0x16,
> 0x44,
> + 0x03, 0x40, 0x16, 0x44, 0x08, 0x16, 0x00, 0x1c, 0x04, 0x40, 0x44,
> 0x04,
> + 0x16, 0x44, 0x07, 0x40, 0x40, 0x16, 0x00, 0x1e, 0x16, 0x44, 0x09,
> 0x16,
> + 0x00, 0x1e, 0x04, 0x16, 0x44, 0x06, 0x40, 0x44, 0x44, 0x04, 0x16,
> 0x00,
> + 0x1d, 0x04, 0x16, 0x44, 0x06, 0x40, 0x44, 0x44, 0x40, 0x16, 0x00,
> 0x1e,
> + 0x16, 0x44, 0x06, 0x40, 0x44, 0x16, 0x00, 0x20, 0x04, 0x00, 0x16,
> 0x44,
> + 0x04, 0x04, 0x00, 0x04, 0x16, 0x00, 0x1f, 0x40, 0x16, 0x44, 0x05,
> 0x00,
> + 0x04, 0x16, 0x00, 0x1f, 0x04, 0x44, 0x00, 0x04, 0x04, 0x40, 0x40,
> 0x04,
> + 0x00, 0x40, 0x40, 0x16, 0x00, 0x1d, 0x04, 0x44, 0x44, 0x00, 0x40,
> 0x06,
> + 0x6e, 0x60, 0x04, 0x16, 0x00, 0x20, 0x16, 0x44, 0x04, 0x40, 0x6e,
> 0xe6,
> + 0x00, 0x40, 0x40, 0x16, 0x00, 0x1e, 0x16, 0x44, 0x05, 0x46, 0xee,
> 0x60,
> + 0x16, 0x00, 0x20, 0x16, 0x44, 0x05, 0x04, 0x6e, 0xee, 0x04, 0x04,
> 0x16,
> + 0x00, 0x1e, 0x04, 0x16, 0x44, 0x05, 0x06, 0x6e, 0xe0, 0x00, 0x04,
> 0x16,
> + 0x00, 0x1e, 0x16, 0x44, 0x06, 0x6e, 0x64, 0x04, 0x16, 0x00, 0x1f,
> 0x04,
> + 0x04, 0x00, 0x00, 0x16, 0x04, 0x04, 0x00, 0x04, 0x16, 0x00, 0x1e,
> 0x04,
> + 0x44, 0x04, 0x04, 0x16, 0x40, 0x04, 0x44, 0x40, 0x04, 0x16, 0x00,
> 0x1d,
> + 0x44, 0x84, 0x74, 0x86, 0x87, 0x84, 0x44, 0x04, 0x00, 0x44, 0x40,
> 0x04,
> + 0x16, 0x00, 0x1c, 0x87, 0xc7, 0x40, 0x77, 0x74, 0x04, 0x04, 0x80,
> 0x00,
> + 0x00, 0x44, 0x40, 0x16, 0x00, 0x1b, 0x7c, 0x7c, 0x84, 0x74, 0x84,
> 0x44,
> + 0x84, 0x48, 0x78, 0x40, 0x00, 0x00, 0x44, 0x44, 0x04, 0x16, 0x00,
> 0x16,
> + 0x40, 0x48, 0xc8, 0xc7, 0x44, 0x40, 0x84, 0x44, 0x76, 0x04, 0x48,
> 0x78,
> + 0x16, 0x00, 0x04, 0x04, 0x40, 0x44, 0x04, 0x16, 0x00, 0x10, 0x08,
> 0x77,
> + 0xff, 0x77, 0x84, 0x44, 0x04, 0x00, 0x00, 0x46, 0x48, 0x74, 0x04,
> 0x44,
> + 0x40, 0x80, 0x40, 0x16, 0x00, 0x04, 0x04, 0x16, 0x44, 0x05, 0x40,
> 0x40,
> + 0x16, 0x00, 0x0a, 0x87, 0x16, 0xff, 0x03, 0xf7, 0x70, 0x88, 0x77,
> 0x77,
> + 0x84, 0x04, 0x44, 0x40, 0x44, 0x04, 0x44, 0x44, 0x04, 0x16, 0x00,
> 0x07,
> + 0x04, 0x16, 0x44, 0x03, 0x04, 0x40, 0x16, 0x00, 0x08, 0x07, 0x88,
> 0x16,
> + 0xff, 0x03, 0x77, 0x87, 0x16, 0xff, 0x03, 0x77, 0x84, 0x04, 0x04,
> 0x44,
> + 0x44, 0x16, 0x40, 0x03, 0x80, 0x16, 0x00, 0x09, 0x04, 0x44, 0x44,
> 0x40,
> + 0x16, 0x00, 0x07, 0x0f, 0xff, 0x16, 0x88, 0x03, 0x80, 0x7f, 0x16,
> 0xff,
> + 0x03, 0xf7, 0x78, 0x16, 0x44, 0x03, 0x04, 0x04, 0x48, 0x87, 0x80,
> 0x16,
> + 0x00, 0x0b, 0x04, 0x44, 0x16, 0x00, 0x07, 0x08, 0x16, 0xff, 0x03,
> 0x77,
> + 0x88, 0x87, 0x16, 0xff, 0x03, 0x77, 0x77, 0x16, 0x04, 0x03, 0x40,
> 0x48,
> + 0x87, 0x77, 0x16, 0x00, 0x0d, 0x44, 0x40, 0x16, 0x00, 0x07, 0x88,
> 0x77,
> + 0xf7, 0x77, 0x8f, 0x77, 0x16, 0x88, 0x05, 0x80, 0x88, 0x88, 0x87,
> 0x77,
> + 0x77, 0x80, 0x16, 0x00, 0x0d, 0x44, 0x40, 0x16, 0x00, 0x0b, 0x07,
> 0x16,
> + 0xff, 0x03, 0x7f, 0x16, 0x77, 0x06, 0x78, 0x16, 0x00, 0x0a, 0x04,
> 0x40,
> + 0x16, 0x00, 0x03, 0x44, 0x40, 0x16, 0x00, 0x0c, 0x87, 0x7f, 0xff,
> 0xff,
> + 0x16, 0x77, 0x04, 0x88, 0x80, 0x16, 0x00, 0x0a, 0x04, 0x44, 0x44,
> 0x00,
> + 0x00, 0x04, 0x44, 0x40, 0x16, 0x00, 0x0e, 0x08, 0x08, 0x88, 0x08,
> 0x16,
> + 0x00, 0x0e, 0x16, 0x44, 0x06, 0x40, 0x16, 0x00, 0x20, 0x16, 0x44,
> 0x06,
> + 0x16, 0x00, 0x21, 0x16, 0x44, 0x05, 0x40, 0x16, 0x00, 0x22, 0x40,
> 0x40,
> + 0x16, 0x00, 0x08
> +};
> +
> +const unsigned char vt_orb_vga16[] = {
> + 0x16, 0x00, 0x52, 0x04, 0x04, 0x16, 0x00, 0x0c, 0x16, 0x80, 0x03,
> 0x88,
> + 0x88, 0x16, 0x80, 0x04, 0x16, 0x00, 0x0b, 0x40, 0x40, 0x16, 0x00,
> 0x03,
> + 0x04, 0x44, 0x6c, 0xcc, 0x64, 0x16, 0x00, 0x08, 0x08, 0x08, 0x88,
> 0x77,
> + 0x16, 0x7f, 0x04, 0x77, 0x78, 0x88, 0x80, 0x80, 0x16, 0x00, 0x07,
> 0x04,
> + 0x6c, 0x6c, 0x44, 0x40, 0x00, 0x00, 0x04, 0x46, 0x4c, 0x77, 0x7c,
> 0xcc,
> + 0x40, 0x16, 0x00, 0x04, 0x08, 0x08, 0x88, 0x7f, 0x16, 0xff, 0x08,
> 0xf7,
> + 0x78, 0x80, 0x80, 0x16, 0x00, 0x05, 0x4c, 0xc7, 0xc7, 0xcc, 0x44,
> 0x44,
> + 0x00, 0x00, 0x44, 0x44, 0x46, 0xcc, 0xf7, 0xfc, 0x7c, 0x60, 0x00,
> 0x00,
> + 0x08, 0x08, 0x87, 0x16, 0xff, 0x0c, 0xf7, 0x88, 0x08, 0x16, 0x00,
> 0x03,
> + 0x6c, 0x16, 0xf7, 0x03, 0xc6, 0x44, 0x44, 0x00, 0x00, 0x16, 0x44,
> 0x03,
> + 0xc7, 0x7f, 0xf7, 0x77, 0xc7, 0x60, 0x00, 0x80, 0x77, 0x16, 0xff,
> 0x0e,
> + 0xf7, 0x70, 0x80, 0x08, 0x67, 0xff, 0x7f, 0x7f, 0x7c, 0xc4, 0x44,
> 0x44,
> + 0x00, 0x00, 0x16, 0x44, 0x03, 0x4c, 0xc7, 0xff, 0xf7, 0xf7, 0x77,
> 0x68,
> + 0x8f, 0x16, 0xff, 0x09, 0x16, 0xf7, 0x03, 0x16, 0xff, 0x05, 0x88,
> 0x67,
> + 0xff, 0x7f, 0xff, 0xff, 0x7c, 0x64, 0x44, 0x44, 0x00, 0x00, 0x04,
> 0x16,
> + 0x44, 0x03, 0x6c, 0xcf, 0x16, 0x7f, 0x04, 0x16, 0xff, 0x0d, 0x16,
> 0xf7,
> + 0x03, 0xff, 0xff, 0x7e, 0x16, 0xff, 0x04, 0x7c, 0xc6, 0x16, 0x44,
> 0x03,
> + 0x00, 0x00, 0x04, 0x16, 0x44, 0x03, 0x46, 0xcc, 0x7c, 0xf7, 0x16,
> 0xff,
> + 0x0d, 0x16, 0x7f, 0x03, 0x7c, 0xc6, 0xcc, 0x7e, 0x16, 0xff, 0x04,
> 0xf7,
> + 0x7c, 0x6c, 0x16, 0x44, 0x03, 0x00, 0x00, 0x04, 0x16, 0x44, 0x03,
> 0x4c,
> + 0x4c, 0xcc, 0xcf, 0x16, 0xff, 0x0f, 0xf7, 0xc4, 0x44, 0x4c, 0x16,
> 0xff,
> + 0x04, 0xf7, 0x7c, 0xcc, 0xc4, 0x16, 0x44, 0x03, 0x00, 0x00, 0x04,
> 0x16,
> + 0x44, 0x04, 0x4c, 0xcc, 0x7f, 0x16, 0xff, 0x0e, 0xf7, 0xf7, 0x44,
> 0x46,
> + 0xcf, 0x16, 0xff, 0x03, 0xf7, 0xf7, 0x77, 0xcc, 0x16, 0x44, 0x03,
> 0xc0,
> + 0x16, 0x00, 0x03, 0x16, 0x44, 0x04, 0xc4, 0xc7, 0x16, 0xff, 0x10,
> 0xf7,
> + 0x44, 0x47, 0x16, 0xff, 0x05, 0x77, 0xcc, 0xc4, 0x44, 0x44, 0x46,
> 0x40,
> + 0x16, 0x00, 0x03, 0xc4, 0x16, 0x44, 0x03, 0x4c, 0xcf, 0x16, 0xff,
> 0x11,
> + 0x44, 0x6f, 0x16, 0xff, 0x04, 0x7f, 0x77, 0x7c, 0x16, 0x44, 0x03,
> 0x4c,
> + 0x40, 0x16, 0x00, 0x03, 0x46, 0x16, 0x44, 0x03, 0xcc, 0x16, 0xff,
> 0x12,
> + 0xc6, 0xcf, 0x16, 0xff, 0x04, 0xf7, 0x7c, 0xc4, 0x16, 0x44, 0x03,
> 0x8c,
> + 0x16, 0x00, 0x04, 0x0c, 0x44, 0x44, 0x64, 0x7f, 0x16, 0xff, 0x12,
> 0x77,
> + 0xcf, 0x16, 0xff, 0x04, 0x7f, 0xcc, 0x16, 0x44, 0x03, 0x48, 0xc4,
> 0x16,
> + 0x00, 0x04, 0x08, 0xc4, 0x44, 0x4c, 0x16, 0xff, 0x13, 0xfc, 0x7e,
> 0x16,
> + 0xff, 0x03, 0xf7, 0xfc, 0x64, 0x16, 0x44, 0x03, 0x4c, 0xc0, 0x16,
> 0x00,
> + 0x05, 0xc6, 0x44, 0xc7, 0x16, 0xff, 0x13, 0x7f, 0x77, 0x16, 0xff,
> 0x03,
> + 0xfc, 0xcc, 0x16, 0x44, 0x04, 0x67, 0x60, 0x16, 0x00, 0x05, 0x8c,
> 0x84,
> + 0x7f, 0x16, 0xff, 0x09, 0x7f, 0xef, 0xff, 0x16, 0xf7, 0x06, 0xff,
> 0xff,
> + 0x77, 0xff, 0xff, 0x7c, 0xcc, 0xc4, 0x16, 0x44, 0x03, 0x48, 0xc7,
> 0x40,
> + 0x16, 0x00, 0x05, 0x07, 0xc7, 0x16, 0xff, 0x0c, 0x7f, 0x7f, 0xef,
> 0xef,
> + 0xfe, 0xff, 0xff, 0x7f, 0x7f, 0x76, 0xcf, 0xc7, 0xcc, 0xcc, 0x16,
> 0x44,
> + 0x04, 0x8c, 0x76, 0x16, 0x00, 0x06, 0x06, 0x7f, 0x7f, 0x16, 0xff,
> 0x08,
> + 0x16, 0x7f, 0x03, 0xfe, 0xfe, 0x16, 0xf7, 0x07, 0xfc, 0x6c, 0x7c,
> 0xcc,
> + 0xc4, 0x16, 0x44, 0x04, 0x67, 0xc8, 0x16, 0x00, 0x07, 0x7f, 0x16,
> 0xff,
> + 0x08, 0x7f, 0xf7, 0xf7, 0xfe, 0x7f, 0x7f, 0x7e, 0x7e, 0x16, 0xf7,
> 0x06,
> + 0x8c, 0xcc, 0xcc, 0xc4, 0x16, 0x44, 0x03, 0x48, 0xc7, 0x60, 0x16,
> 0x00,
> + 0x06, 0x08, 0xff, 0xff, 0xf7, 0x16, 0xff, 0x06, 0x16, 0xf7, 0x03,
> 0x77,
> + 0xfc, 0xfc, 0xf7, 0x77, 0x77, 0x16, 0x7f, 0x05, 0xc8, 0xcc, 0xc4,
> 0x16,
> + 0x44, 0x04, 0x8c, 0x7c, 0x78, 0x16, 0x00, 0x06, 0x0f, 0x7f, 0xff,
> 0x7f,
> + 0x16, 0xff, 0x05, 0x7f, 0x7f, 0x77, 0x7e, 0x7e, 0xcf, 0xcf, 0xce,
> 0x77,
> + 0x16, 0x7c, 0x04, 0x16, 0x77, 0x03, 0x4c, 0x4c, 0x16, 0x44, 0x04,
> 0xc7,
> + 0x77, 0x77, 0x16, 0x00, 0x06, 0x8f, 0xff, 0xff, 0x7f, 0x7f, 0x16,
> 0xff,
> + 0x04, 0xf7, 0xf7, 0x7e, 0x77, 0x77, 0x7c, 0xec, 0xcc, 0xcc, 0x16,
> 0xc6,
> + 0x04, 0xcc, 0xc7, 0xc7, 0x76, 0x16, 0x44, 0x04, 0x48, 0xc7, 0xc7,
> 0xf7,
> + 0x80, 0x16, 0x00, 0x05, 0x7f, 0x7f, 0xf7, 0x7f, 0x16, 0xff, 0x04,
> 0x7f,
> + 0x7f, 0xcf, 0xc7, 0xce, 0xcc, 0xc6, 0x16, 0xc4, 0x03, 0x4c, 0x4c,
> 0x44,
> + 0x4c, 0x48, 0x66, 0xc8, 0xc7, 0x84, 0x16, 0x44, 0x03, 0x8c, 0x7c,
> 0x67,
> + 0x7f, 0x80, 0x16, 0x00, 0x04, 0x08, 0x7f, 0xff, 0x77, 0xf7, 0x16,
> 0xff,
> + 0x04, 0xfe, 0x77, 0x7c, 0xec, 0xec, 0xc6, 0x4c, 0x46, 0x4c, 0x4c,
> 0x44,
> + 0x44, 0x4c, 0x16, 0x44, 0x03, 0x64, 0x86, 0xc8, 0x64, 0x44, 0x44,
> 0xc7,
> + 0x7c, 0x87, 0x7f, 0x70, 0x16, 0x00, 0x04, 0x08, 0xf7, 0xff, 0xe7,
> 0x7f,
> + 0x16, 0xff, 0x03, 0xfe, 0xfc, 0xfc, 0xec, 0xcc, 0x16, 0x44, 0x0b,
> 0x64,
> + 0x46, 0x44, 0x8c, 0x86, 0x84, 0x44, 0x6c, 0x46, 0x8c, 0x77, 0xf8,
> 0x16,
> + 0x00, 0x04, 0x0f, 0x7f, 0xf7, 0xcf, 0x7f, 0x7f, 0xff, 0xff, 0xed,
> 0xe7,
> + 0xce, 0xcc, 0x64, 0x64, 0xc4, 0x16, 0x44, 0x0b, 0x46, 0x16, 0x48,
> 0x03,
> + 0x84, 0x84, 0x88, 0x88, 0x77, 0xf8, 0x16, 0x00, 0x04, 0x0f, 0xf7,
> 0xfe,
> + 0x7e, 0x7f, 0xff, 0xff, 0xef, 0x7e, 0xcc, 0xcc, 0x64, 0x16, 0x44,
> 0x10,
> + 0x48, 0x68, 0x68, 0x88, 0x48, 0x68, 0xc7, 0x7f, 0x16, 0x00, 0x04,
> 0x7f,
> + 0x7f, 0x7c, 0x7c, 0xfe, 0xff, 0xff, 0xf7, 0xec, 0x7c, 0x64, 0x4c,
> 0x16,
> + 0x44, 0x10, 0x84, 0x48, 0x48, 0x68, 0x88, 0x88, 0x67, 0xf7, 0x80,
> 0x16,
> + 0x00, 0x03, 0x7f, 0x7f, 0xc7, 0xce, 0x7f, 0xff, 0xff, 0xe7, 0xec,
> 0x66,
> + 0x4c, 0x16, 0x44, 0x11, 0x16, 0x48, 0x03, 0x88, 0x68, 0x68, 0x67,
> 0x7f,
> + 0x80, 0x16, 0x00, 0x03, 0xf7, 0x7f, 0xcc, 0xec, 0xfe, 0xff, 0xff,
> 0x7e,
> + 0xc6, 0x16, 0x44, 0x15, 0x04, 0x84, 0x88, 0x88, 0x6c, 0x7f, 0x70,
> 0x00,
> + 0x00, 0x08, 0x7f, 0x77, 0x6c, 0xc7, 0xef, 0xff, 0xf7, 0xec, 0xc4,
> 0x64,
> + 0x16, 0x44, 0x13, 0x04, 0x84, 0x04, 0x84, 0x84, 0x86, 0x7f, 0x70,
> 0x00,
> + 0x00, 0x08, 0xf7, 0x7c, 0xc6, 0xec, 0xe7, 0xef, 0xe7, 0xc6, 0x64,
> 0x16,
> + 0x44, 0x15, 0x04, 0x84, 0x06, 0x86, 0x46, 0x7f, 0x78, 0x00, 0x00,
> 0x08,
> + 0xf7, 0x7c, 0x6c, 0xcc, 0xe7, 0x77, 0xcc, 0xc6, 0xc4, 0x16, 0x44,
> 0x13,
> + 0x04, 0x04, 0x16, 0x40, 0x04, 0x46, 0x7f, 0xf0, 0x00, 0x00, 0x08,
> 0xf7,
> + 0xcc, 0x6c, 0x6e, 0xce, 0xce, 0xc6, 0x66, 0x64, 0x16, 0x44, 0x17,
> 0x04,
> + 0x04, 0x46, 0xcf, 0x78, 0x00, 0x00, 0x07, 0xf7, 0x74, 0x6c, 0x6c,
> 0xcc,
> + 0x16, 0xc6, 0x03, 0x64, 0x16, 0x44, 0x13, 0x04, 0x44, 0x40, 0x40,
> 0x44,
> + 0x40, 0x46, 0x7f, 0xf8, 0x00, 0x00, 0x08, 0xf7, 0xc6, 0x46, 0x66,
> 0x6c,
> + 0x6c, 0x66, 0x46, 0x46, 0x16, 0x44, 0x17, 0x04, 0x04, 0x44, 0xef,
> 0x78,
> + 0x00, 0x00, 0x07, 0xf7, 0xc6, 0x46, 0x4c, 0x16, 0x46, 0x03, 0x66,
> 0x64,
> + 0x16, 0x44, 0x15, 0x04, 0x04, 0x44, 0x44, 0x46, 0x7f, 0xf8, 0x00,
> 0x00,
> + 0x07, 0xf7, 0xc4, 0x16, 0x64, 0x07, 0x16, 0x44, 0x17, 0x04, 0x04,
> 0x44,
> + 0xff, 0x78, 0x00, 0x00, 0x08, 0xf7, 0xc4, 0x16, 0x46, 0x07, 0x16,
> 0x44,
> + 0x15, 0x04, 0x04, 0x44, 0x44, 0x4c, 0xef, 0xf8, 0x00, 0x00, 0x07,
> 0xf7,
> + 0xc4, 0x64, 0x16, 0x46, 0x06, 0x16, 0x44, 0x14, 0x40, 0x44, 0x44,
> 0x04,
> + 0x44, 0x4c, 0xff, 0x78, 0x00, 0x00, 0x08, 0xf7, 0x84, 0x46, 0x44,
> 0x16,
> + 0x64, 0x06, 0x16, 0x44, 0x14, 0x04, 0x04, 0x44, 0x44, 0x47, 0xef,
> 0xf8,
> + 0x00, 0x00, 0x08, 0xff, 0xc4, 0x44, 0x46, 0x44, 0x16, 0x46, 0x04,
> 0x16,
> + 0x44, 0x14, 0x04, 0x16, 0x44, 0x04, 0xce, 0xff, 0x78, 0x00, 0x00,
> 0x08,
> + 0xff, 0x84, 0x46, 0x44, 0x16, 0x64, 0x05, 0x66, 0x16, 0x44, 0x13,
> 0x40,
> + 0x40, 0x44, 0x44, 0x46, 0xcf, 0xef, 0x70, 0x16, 0x00, 0x03, 0xff,
> 0xc4,
> + 0x16, 0x44, 0x04, 0x16, 0x46, 0x04, 0x16, 0x44, 0x12, 0x40, 0x16,
> 0x44,
> + 0x04, 0x4c, 0xee, 0xff, 0x70, 0x16, 0x00, 0x03, 0x7f, 0x74, 0x44,
> 0x44,
> + 0x16, 0x64, 0x07, 0x16, 0x44, 0x12, 0x04, 0x04, 0x44, 0x44, 0x4e,
> 0xef,
> + 0xef, 0x70, 0x16, 0x00, 0x03, 0x7f, 0x76, 0x16, 0x44, 0x05, 0x16,
> 0x46,
> + 0x04, 0x16, 0x44, 0x11, 0x40, 0x16, 0x44, 0x04, 0xee, 0xfe, 0xff,
> 0x80,
> + 0x16, 0x00, 0x03, 0x8f, 0xf8, 0x16, 0x44, 0x03, 0x16, 0x64, 0x06,
> 0x16,
> + 0x44, 0x12, 0x40, 0x44, 0x44, 0x4c, 0xee, 0xef, 0xf7, 0x80, 0x16,
> 0x00,
> + 0x03, 0x8f, 0xfc, 0x16, 0x44, 0x06, 0x16, 0x46, 0x03, 0x16, 0x44,
> 0x11,
> + 0x04, 0x04, 0x44, 0x44, 0x6e, 0xef, 0xef, 0xf7, 0x16, 0x00, 0x04,
> 0x07,
> + 0xf7, 0x16, 0x44, 0x04, 0x16, 0x64, 0x03, 0x16, 0x46, 0x03, 0x16,
> 0x44,
> + 0x13, 0x46, 0xce, 0xee, 0xff, 0x77, 0x16, 0x00, 0x04, 0x08, 0xff,
> 0x84,
> + 0x16, 0x44, 0x05, 0x46, 0x44, 0x16, 0x64, 0x03, 0x16, 0x44, 0x0f,
> 0x04,
> + 0x44, 0x44, 0x4c, 0xec, 0xef, 0xef, 0xf8, 0x16, 0x00, 0x04, 0x08,
> 0x7f,
> + 0x74, 0x16, 0x44, 0x03, 0x46, 0x46, 0x44, 0x16, 0x46, 0x04, 0x16,
> 0x44,
> + 0x12, 0xcc, 0xec, 0xef, 0xff, 0x70, 0x16, 0x00, 0x05, 0x7f, 0xf4,
> 0x16,
> + 0x44, 0x05, 0x46, 0x44, 0x44, 0x16, 0x64, 0x03, 0x16, 0x44, 0x10,
> 0x46,
> + 0xc6, 0xcc, 0xf7, 0xf7, 0x70, 0x16, 0x00, 0x05, 0x8f, 0xf7, 0x04,
> 0x16,
> + 0x44, 0x05, 0x16, 0x46, 0x05, 0x16, 0x44, 0x10, 0xc4, 0xc6, 0xcc,
> 0xfe,
> + 0xf7, 0x16, 0x00, 0x06, 0x07, 0xff, 0x16, 0x44, 0x05, 0x46, 0x16,
> 0x44,
> + 0x03, 0x16, 0x64, 0x04, 0x16, 0x44, 0x0c, 0x46, 0x66, 0x66, 0x6c,
> 0x67,
> + 0x7f, 0x77, 0x16, 0x00, 0x06, 0x08, 0xff, 0x74, 0x04, 0x16, 0x44,
> 0x04,
> + 0x16, 0x46, 0x05, 0x4c, 0x46, 0x16, 0x44, 0x0c, 0x64, 0xc4, 0xc4,
> 0xc6,
> + 0xc7, 0x7f, 0x70, 0x16, 0x00, 0x07, 0x8f, 0xf6, 0x16, 0x44, 0x09,
> 0x16,
> + 0x64, 0x05, 0x16, 0x44, 0x08, 0x46, 0xc6, 0xc6, 0x66, 0x6c, 0x6c,
> 0x77,
> + 0x77, 0x80, 0x16, 0x00, 0x07, 0x87, 0xf7, 0x40, 0x16, 0x44, 0x05,
> 0x16,
> + 0x46, 0x09, 0x16, 0x44, 0x06, 0xc6, 0xc6, 0x66, 0x66, 0xc6, 0xc6,
> 0xc7,
> + 0x77, 0xf7, 0x16, 0x00, 0x08, 0x08, 0xff, 0xc4, 0x16, 0x44, 0x09,
> 0x16,
> + 0x64, 0x05, 0x66, 0x66, 0x64, 0x66, 0x6c, 0x16, 0x66, 0x03, 0xc6,
> 0xc6,
> + 0x6c, 0x6c, 0xc7, 0x77, 0x78, 0x16, 0x00, 0x09, 0x7f, 0xf6, 0x04,
> 0x16,
> + 0x44, 0x05, 0x16, 0x46, 0x08, 0x64, 0x64, 0x6c, 0x66, 0x66, 0x16,
> 0xc6,
> + 0x03, 0x66, 0x66, 0xc6, 0x6c, 0x77, 0x7f, 0x80, 0x16, 0x00, 0x09,
> 0x07,
> + 0xf7, 0x16, 0x44, 0x0a, 0x16, 0x64, 0x04, 0x66, 0xc6, 0x64, 0x64,
> 0x16,
> + 0x66, 0x04, 0xc6, 0xc6, 0x6c, 0xc7, 0xe7, 0x77, 0x16, 0x00, 0x0a,
> 0x08,
> + 0x7f, 0x74, 0x16, 0x44, 0x06, 0x16, 0x46, 0x03, 0x44, 0x16, 0x64,
> 0x05,
> + 0xc6, 0x66, 0x66, 0x16, 0xc6, 0x03, 0x66, 0x6c, 0x6c, 0xe7, 0x77,
> 0x70,
> + 0x16, 0x00, 0x0b, 0x87, 0xfc, 0x16, 0x44, 0x09, 0x64, 0x16, 0x46,
> 0x03,
> + 0x4c, 0x16, 0x46, 0x04, 0x16, 0x66, 0x03, 0xc6, 0xc6, 0xce, 0xde,
> 0x77,
> + 0x80, 0x16, 0x00, 0x0b, 0x08, 0x7f, 0xc4, 0x16, 0x44, 0x07, 0x64,
> 0x44,
> + 0x16, 0x64, 0x05, 0x16, 0x66, 0x03, 0x46, 0xc6, 0xc6, 0x66, 0x6c,
> 0x77,
> + 0xe7, 0x78, 0x16, 0x00, 0x0d, 0x87, 0xfc, 0x16, 0x44, 0x08, 0x64,
> 0x44,
> + 0x46, 0x46, 0x4c, 0x16, 0x46, 0x04, 0x16, 0x66, 0x03, 0xc6, 0xce,
> 0x7e,
> + 0xd7, 0x80, 0x16, 0x00, 0x0d, 0x08, 0x7f, 0xc4, 0x16, 0x44, 0x08,
> 0x16,
> + 0x64, 0x06, 0xc6, 0x66, 0x4c, 0x46, 0xc6, 0xce, 0x7c, 0x77, 0x78,
> 0x16,
> + 0x00, 0x0f, 0x87, 0xf7, 0x16, 0x44, 0x0a, 0x16, 0x46, 0x06, 0x66,
> 0x66,
> + 0x6c, 0xec, 0xe7, 0xe7, 0x16, 0x00, 0x11, 0x8f, 0x7c, 0x16, 0x44,
> 0x07,
> + 0x16, 0x64, 0x09, 0x6c, 0xec, 0xe7, 0xc7, 0x80, 0x16, 0x00, 0x11,
> 0x08,
> + 0x77, 0xc6, 0x16, 0x44, 0x09, 0x16, 0x46, 0x04, 0x4c, 0x6c, 0xec,
> 0xee,
> + 0xc7, 0x78, 0x16, 0x00, 0x13, 0x07, 0x77, 0xcc, 0x16, 0x44, 0x06,
> 0x16,
> + 0x64, 0x05, 0xc4, 0xc6, 0xce, 0xce, 0xec, 0x78, 0x16, 0x00, 0x15,
> 0x88,
> + 0x77, 0xc6, 0xc4, 0xc4, 0x16, 0x44, 0x07, 0xc6, 0xc6, 0x16, 0xec,
> 0x03,
> + 0x78, 0x80, 0x16, 0x00, 0x16, 0x88, 0x77, 0xcc, 0x16, 0x4c, 0x06,
> 0x16,
> + 0x6c, 0x03, 0xec, 0xec, 0xe6, 0xe8, 0x80, 0x16, 0x00, 0x18, 0x88,
> 0x87,
> + 0xcc, 0x16, 0xc6, 0x03, 0x16, 0xcc, 0x03, 0xe6, 0xec, 0xe6, 0xe6,
> 0x78,
> + 0x16, 0x00, 0x1c, 0x88, 0x87, 0x16, 0xcc, 0x06, 0xc6, 0x76, 0x88,
> 0x16,
> + 0x00, 0x1f, 0x80, 0x16, 0x88, 0x05, 0x80, 0x16, 0x00, 0x88
> +};
>
> Modified: head/sys/dev/vt/vt.h
>
> ==============================================================================
> --- head/sys/dev/vt/vt.h Tue Jul 21 20:30:06 2015 (r285765)
> +++ head/sys/dev/vt/vt.h Tue Jul 21 20:33:36 2015 (r285766)
> @@ -164,7 +164,12 @@ struct vt_device {
> #define VD_PASTEBUFSZ(vd) ((vd)->vd_pastebuf.vpb_bufsz)
> #define VD_PASTEBUFLEN(vd) ((vd)->vd_pastebuf.vpb_len)
>
> +#define VT_LOCK(vd) mtx_lock(&(vd)->vd_lock)
> +#define VT_UNLOCK(vd) mtx_unlock(&(vd)->vd_lock)
> +#define VT_LOCK_ASSERT(vd, what) mtx_assert(&(vd)->vd_lock,
> what)
> +
> void vt_resume(struct vt_device *vd);
> +void vt_resume_flush_timer(struct vt_device *vd, int ms);
> void vt_suspend(struct vt_device *vd);
>
> /*
> @@ -363,6 +368,7 @@ struct vt_driver {
> * Utility macro to make early vt(4) instances work.
> */
>
> +extern struct terminal vt_consterm;
> extern const struct terminal_class vt_termclass;
> void vt_upgrade(struct vt_device *vd);
>
> @@ -427,10 +433,29 @@ void vt_mouse_state(int show);
> #define VT_MOUSE_HIDE 0
>
> /* Utilities. */
> +void vt_compute_drawable_area(struct vt_window *);
> void vt_determine_colors(term_char_t c, int cursor,
> term_color_t *fg, term_color_t *bg);
> int vt_is_cursor_in_area(const struct vt_device *vd,
> const term_rect_t *area);
> +void vt_termsize(struct vt_device *, struct vt_font *, term_pos_t *);
> +void vt_winsize(struct vt_device *, struct vt_font *, struct winsize *);
> +
> +/* Logos-on-boot. */
> +#define VT_LOGOS_DRAW_BEASTIE 0
> +#define VT_LOGOS_DRAW_ALT_BEASTIE 1
> +#define VT_LOGOS_DRAW_ORB 2
> +
> +extern int vt_draw_logo_cpus;
> +extern int vt_splash_cpu;
> +extern int vt_splash_ncpu;
> +extern int vt_splash_cpu_style;
> +extern int vt_splash_cpu_duration;
> +
> +extern const unsigned int vt_logo_sprite_height;
> +extern const unsigned int vt_logo_sprite_width;
> +
> +void vtterm_draw_cpu_logos(struct vt_device *);
>
> #endif /* !_DEV_VT_VT_H_ */
>
>
> Modified: head/sys/dev/vt/vt_core.c
>
> ==============================================================================
> --- head/sys/dev/vt/vt_core.c Tue Jul 21 20:30:06 2015 (r285765)
> +++ head/sys/dev/vt/vt_core.c Tue Jul 21 20:33:36 2015 (r285766)
> @@ -113,10 +113,6 @@ const struct terminal_class vt_termclass
> #define VT_BELLDURATION ((5 * hz + 99) / 100)
> #define VT_BELLPITCH 800
>
> -#define VT_LOCK(vd) mtx_lock(&(vd)->vd_lock)
> -#define VT_UNLOCK(vd) mtx_unlock(&(vd)->vd_lock)
> -#define VT_LOCK_ASSERT(vd, what) mtx_assert(&(vd)->vd_lock,
> what)
> -
> #define VT_UNIT(vw) ((vw)->vw_device->vd_unit * VT_MAXWINDOWS
> + \
> (vw)->vw_number)
>
> @@ -139,6 +135,15 @@ static VT_SYSCTL_INT(kbd_debug, 1, "Enab
> static VT_SYSCTL_INT(kbd_panic, 0, "Enable request to panic. "
> "See kbdmap(5) to configure.");
>
> +/* Used internally, not a tunable. */
> +int vt_draw_logo_cpus;
> +VT_SYSCTL_INT(splash_cpu, 1, "Show logo CPUs during boot");
> +VT_SYSCTL_INT(splash_ncpu, 0, "Override number of logos displayed "
> + "(0 = do not override)");
> +VT_SYSCTL_INT(splash_cpu_style, 1, "Draw logo style "
> + "(0=Beastie, 1=Alternate beastie, 2=Orb)");
> +VT_SYSCTL_INT(splash_cpu_duration, 10, "Hide logos after (seconds)");
> +
> static struct vt_device vt_consdev;
> static unsigned int vt_unit = 0;
> static MALLOC_DEFINE(M_VT, "vt", "vt device");
> @@ -176,7 +181,7 @@ SET_DECLARE(vt_drv_set, struct vt_driver
> #define _VTDEFH MAX(100, PIXEL_HEIGHT(VT_FB_DEFAULT_HEIGHT))
> #define _VTDEFW MAX(200, PIXEL_WIDTH(VT_FB_DEFAULT_WIDTH))
>
> -static struct terminal vt_consterm;
> +struct terminal vt_consterm;
> static struct vt_window vt_conswindow;
> static struct vt_device vt_consdev = {
> .vd_driver = NULL,
> @@ -223,7 +228,7 @@ static struct vt_window vt_conswindow =
> .vw_kbdmode = K_XLATE,
> .vw_grabbed = 0,
> };
> -static struct terminal vt_consterm = {
> +struct terminal vt_consterm = {
> .tm_class = &vt_termclass,
> .tm_softc = &vt_conswindow,
> .tm_flags = TF_CONS,
> @@ -275,7 +280,7 @@ vt_schedule_flush(struct vt_device *vd,
> callout_schedule(&vd->vd_timer, hz / (1000 / ms));
> }
>
> -static void
> +void
> vt_resume_flush_timer(struct vt_device *vd, int ms)
> {
>
> @@ -548,11 +553,13 @@ vt_window_switch(struct vt_window *vw)
> return (0);
> }
>
> -static inline void
> +void
> vt_termsize(struct vt_device *vd, struct vt_font *vf, term_pos_t *size)
> {
>
> size->tp_row = vd->vd_height;
> + if (vt_draw_logo_cpus)
> + size->tp_row -= vt_logo_sprite_height;
> size->tp_col = vd->vd_width;
> if (vf != NULL) {
> size->tp_row /= vf->vf_height;
> @@ -561,10 +568,33 @@ vt_termsize(struct vt_device *vd, struct
> }
>
> static inline void
> +vt_termrect(struct vt_device *vd, struct vt_font *vf, term_rect_t *rect)
> +{
> +
> + rect->tr_begin.tp_row = rect->tr_begin.tp_col = 0;
> + if (vt_draw_logo_cpus)
> + rect->tr_begin.tp_row = vt_logo_sprite_height;
> +
> + rect->tr_end.tp_row = vd->vd_height;
> + rect->tr_end.tp_col = vd->vd_width;
> +
> + if (vf != NULL) {
> + rect->tr_begin.tp_row =
> + howmany(rect->tr_begin.tp_row, vf->vf_height);
> +
> + rect->tr_end.tp_row /= vf->vf_height;
> + rect->tr_end.tp_col /= vf->vf_width;
> + }
> +}
> +
> +void
> vt_winsize(struct vt_device *vd, struct vt_font *vf, struct winsize *size)
> {
>
> - size->ws_row = size->ws_ypixel = vd->vd_height;
> + size->ws_ypixel = vd->vd_height;
> + if (vt_draw_logo_cpus)
> + size->ws_ypixel -= vt_logo_sprite_height;
> + size->ws_row = size->ws_ypixel;
> size->ws_col = size->ws_xpixel = vd->vd_width;
> if (vf != NULL) {
> size->ws_row /= vf->vf_height;
> @@ -572,17 +602,20 @@ vt_winsize(struct vt_device *vd, struct
> }
> }
>
> -static inline void
> +void
> vt_compute_drawable_area(struct vt_window *vw)
> {
> struct vt_device *vd;
> struct vt_font *vf;
> + vt_axis_t height;
>
> vd = vw->vw_device;
>
> if (vw->vw_font == NULL) {
> vw->vw_draw_area.tr_begin.tp_col = 0;
> vw->vw_draw_area.tr_begin.tp_row = 0;
> + if (vt_draw_logo_cpus)
> + vw->vw_draw_area.tr_begin.tp_row =
> vt_logo_sprite_height;
> vw->vw_draw_area.tr_end.tp_col = vd->vd_width;
> vw->vw_draw_area.tr_end.tp_row = vd->vd_height;
> return;
> @@ -595,12 +628,17 @@ vt_compute_drawable_area(struct vt_windo
> * the screen.
> */
>
> + height = vd->vd_height;
> + if (vt_draw_logo_cpus)
> + height -= vt_logo_sprite_height;
> vw->vw_draw_area.tr_begin.tp_col = (vd->vd_width % vf->vf_width) /
> 2;
> - vw->vw_draw_area.tr_begin.tp_row = (vd->vd_height % vf->vf_height)
> / 2;
> + vw->vw_draw_area.tr_begin.tp_row = (height % vf->vf_height) / 2;
> + if (vt_draw_logo_cpus)
> + vw->vw_draw_area.tr_begin.tp_row += vt_logo_sprite_height;
> vw->vw_draw_area.tr_end.tp_col = vw->vw_draw_area.tr_begin.tp_col +
> vd->vd_width / vf->vf_width * vf->vf_width;
> vw->vw_draw_area.tr_end.tp_row = vw->vw_draw_area.tr_begin.tp_row +
> - vd->vd_height / vf->vf_height * vf->vf_height;
> + height / vf->vf_height * vf->vf_height;
> }
>
> static void
> @@ -1111,7 +1149,6 @@ vt_flush(struct vt_device *vd)
> struct vt_window *vw;
> struct vt_font *vf;
> term_rect_t tarea;
> - term_pos_t size;
> #ifndef SC_NO_CUTPASTE
> int cursor_was_shown, cursor_moved;
> #endif
> @@ -1166,14 +1203,14 @@ vt_flush(struct vt_device *vd)
> #endif
>
> vtbuf_undirty(&vw->vw_buf, &tarea);
> - vt_termsize(vd, vf, &size);
>
> /* Force a full redraw when the screen contents are invalid. */
> if (vd->vd_flags & VDF_INVALID) {
> - tarea.tr_begin.tp_row = tarea.tr_begin.tp_col = 0;
> - tarea.tr_end = size;
> -
> vd->vd_flags &= ~VDF_INVALID;
> +
> + vt_termrect(vd, vf, &tarea);
> + if (vt_draw_logo_cpus)
> + vtterm_draw_cpu_logos(vd);
> }
>
> if (tarea.tr_begin.tp_col < tarea.tr_end.tp_col) {
> @@ -1318,7 +1355,8 @@ vtterm_cnprobe(struct terminal *tm, stru
>
> if (vtdbest != NULL) {
> #ifdef DEV_SPLASH
> - vtterm_splash(vd);
> + if (!vt_splash_cpu)
> + vtterm_splash(vd);
> #endif
> vd->vd_flags |= VDF_INITIALIZED;
> }
>
> Added: head/sys/dev/vt/vt_cpulogos.c
>
> ==============================================================================
> --- /dev/null 00:00:00 1970 (empty, because file is newly added)
> +++ head/sys/dev/vt/vt_cpulogos.c Tue Jul 21 20:33:36 2015
> (r285766)
> @@ -0,0 +1,266 @@
> +/*-
> + * Copyright (c) 2015 Conrad Meyer <cse.cem at gmail.com>
> + * All rights reserved.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + * notice, this list of conditions and the following disclaimer in the
> + * documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
> WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + */
> +
> +#include <sys/cdefs.h>
> +__FBSDID("$FreeBSD$");
> +
> +#include <sys/param.h>
> +#include <sys/callout.h>
> +#include <sys/cons.h>
> +#include <sys/kernel.h>
> +#include <sys/smp.h>
> +#include <sys/systm.h>
> +#include <sys/terminal.h>
> +
> +#include <dev/vt/vt.h>
> +
> +extern const unsigned char vt_beastie_vga16[];
> +extern const unsigned char vt_beastie2_vga16[];
> +extern const unsigned char vt_orb_vga16[];
> +
> +static struct callout vt_splash_cpu_callout;
> +
> +static inline unsigned char
> +vt_vga2bsd(unsigned char vga)
> +{
> + static const unsigned char lut[8] = {
> + 0,
> + 4, /* 1 and 4 swap */
> + 2,
> + 6, /* 3 and 6 swap */
> + 1, /* 4 and 1 swap */
> + 5,
> + 3, /* 6 and 3 swap */
> + 7,
> + };
> + unsigned int bright;
> +
> + bright = (vga & 0x8);
> + return (lut[vga & 0x7] | bright);
> +}
> +
> +static void
> +vt_draw_2_vga16_px(struct vt_device *vd, vt_axis_t x, vt_axis_t y,
> + unsigned char color)
> +{
> +
> + vd->vd_driver->vd_setpixel(vd, x, y, vt_vga2bsd(color >> 4));
> + vd->vd_driver->vd_setpixel(vd, x + 1, y, vt_vga2bsd(color & 0xf));
> +}
> +
> +static void
> +vt_draw_1_logo(struct vt_device *vd, vt_axis_t top, vt_axis_t left)
> +{
> + const unsigned char rle_sent = 0x16, *data;
> + unsigned int xy, run, runcolor, i;
> +
> + switch (vt_splash_cpu_style) {
> + case VT_LOGOS_DRAW_ALT_BEASTIE:
> + data = vt_beastie2_vga16;
> + break;
> + case VT_LOGOS_DRAW_ORB:
> + data = vt_orb_vga16;
> + break;
> + case VT_LOGOS_DRAW_BEASTIE:
> + /* FALLTHROUGH */
> + default:
> + data = vt_beastie_vga16;
> + break;
> + }
> +
> + /* Decode basic RLE (gets us to 30-40% of uncompressed data size):
> */
> + for (i = 0, xy = 0; xy < vt_logo_sprite_height *
> vt_logo_sprite_width;) {
> + if (data[i] == rle_sent) {
> + runcolor = data[i + 1];
> + run = data[i + 2];
> +
> + for (; run; run--, xy += 2)
> + vt_draw_2_vga16_px(vd,
> + left + (xy % vt_logo_sprite_width),
> + top + (xy / vt_logo_sprite_width),
> + runcolor);
> +
> + i += 3;
> + } else {
> + vt_draw_2_vga16_px(vd, left + (xy %
> vt_logo_sprite_width),
> + top + (xy / vt_logo_sprite_width), data[i]);
> +
> + i++;
> + xy += 2;
> + }
> + }
> +}
> +
> +void
> +vtterm_draw_cpu_logos(struct vt_device *vd)
> +{
> + unsigned int ncpu, i;
> + vt_axis_t left;
> +
> + if (vt_splash_ncpu)
> + ncpu = vt_splash_ncpu;
> + else {
> + ncpu = mp_ncpus;
> + if (ncpu < 1)
> + ncpu = 1;
> + }
> +
> + if (vd->vd_driver->vd_drawrect)
> + vd->vd_driver->vd_drawrect(vd, 0, 0, vd->vd_width,
> + vt_logo_sprite_height, 1, TC_BLACK);
> + /*
> + * Blank is okay because we only ever draw beasties on full screen
> + * refreshes.
> + */
> + else if (vd->vd_driver->vd_blank)
> + vd->vd_driver->vd_blank(vd, TC_BLACK);
> +
> + ncpu = MIN(ncpu, vd->vd_width / vt_logo_sprite_width);
> + for (i = 0, left = 0; i < ncpu; left += vt_logo_sprite_width, i++)
> + vt_draw_1_logo(vd, 0, left);
> +}
> +
> +static void
> +vt_fini_logos(void *dummy __unused)
> +{
> + struct vt_device *vd;
> + struct vt_window *vw;
> + struct terminal *tm;
> + struct vt_font *vf;
> + struct winsize wsz;
> + term_pos_t size;
> +
> + if (!vt_draw_logo_cpus)
> + return;
> + if (!vty_enabled(VTY_VT))
> + return;
> + if (!vt_splash_cpu)
> + return;
> +
> + tm = &vt_consterm;
> + vw = tm->tm_softc;
> + if (vw == NULL)
> + return;
> + vd = vw->vw_device;
> + if (vd == NULL)
> + return;
> + vf = vw->vw_font;
> + if (vf == NULL)
> + return;
> +
> + VT_LOCK(vd);
> + if ((vd->vd_flags & (VDF_DEAD | VDF_TEXTMODE)) != 0)
> + goto out;
> +
> + vt_draw_logo_cpus = 0;
> + VT_UNLOCK(vd);
> +
> + vt_termsize(vd, vf, &size);
> + vt_winsize(vd, vf, &wsz);
> +
> + /* Resize screen buffer and terminal. */
> + terminal_mute(tm, 1);
> + vtbuf_grow(&vw->vw_buf, &size, vw->vw_buf.vb_history_size);
> + terminal_set_winsize_blank(tm, &wsz, 0, NULL);
> + terminal_set_cursor(tm, &vw->vw_buf.vb_cursor);
> + terminal_mute(tm, 0);
> +
> + VT_LOCK(vd);
> + vt_compute_drawable_area(vw);
> +
> + if (vd->vd_curwindow == vw) {
> + vd->vd_flags |= VDF_INVALID;
> + vt_resume_flush_timer(vd, 0);
> + }
> +
> +out:
> + VT_UNLOCK(vd);
> +}
> +
> +static void
> +vt_init_logos(void *dummy)
> +{
> + struct vt_device *vd;
> + struct vt_window *vw;
> + struct terminal *tm;
> + struct vt_font *vf;
> + struct winsize wsz;
> + term_pos_t size;
> +
> + if (!vty_enabled(VTY_VT))
> + return;
> + if (!vt_splash_cpu)
> + return;
> +
> + tm = &vt_consterm;
> + vw = tm->tm_softc;
> + if (vw == NULL)
> + return;
> + vd = vw->vw_device;
> + if (vd == NULL)
> + return;
> + vf = vw->vw_font;
> + if (vf == NULL)
> + return;
> +
> + VT_LOCK(vd);
> + KASSERT((vd->vd_flags & VDF_INITIALIZED) != 0,
> + ("vd %p not initialized", vd));
> +
> + if ((vd->vd_flags & (VDF_DEAD | VDF_TEXTMODE)) != 0)
> + goto out;
> + if (vd->vd_height <= vt_logo_sprite_height)
> + goto out;
> +
> + vt_draw_logo_cpus = 1;
> + VT_UNLOCK(vd);
> +
> + vt_termsize(vd, vf, &size);
> + vt_winsize(vd, vf, &wsz);
> +
> + /* Resize screen buffer and terminal. */
> + terminal_mute(tm, 1);
> + vtbuf_grow(&vw->vw_buf, &size, vw->vw_buf.vb_history_size);
> + terminal_set_winsize_blank(tm, &wsz, 0, NULL);
> + terminal_set_cursor(tm, &vw->vw_buf.vb_cursor);
> + terminal_mute(tm, 0);
> +
> + VT_LOCK(vd);
> + vt_compute_drawable_area(vw);
> +
> + if (vd->vd_curwindow == vw) {
> + vd->vd_flags |= VDF_INVALID;
> + vt_resume_flush_timer(vd, 0);
> + }
> +
> + callout_init(&vt_splash_cpu_callout, 1);
> + callout_reset(&vt_splash_cpu_callout, vt_splash_cpu_duration * hz,
> + vt_fini_logos, NULL);
> +
> +out:
> + VT_UNLOCK(vd);
> +}
> +SYSINIT(vt_logos, SI_SUB_CPU + 1, SI_ORDER_ANY, vt_init_logos, NULL);
>
>
More information about the svn-src-all
mailing list