lkml.org 
[lkml]   [1996]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Boot messages (Was: Re: Ideas for v2.1) (fwd)
    On Sun, 23 Jun 1996, John Sullivan wrote:

    > In article <4qef89$8n@melchior.cuivre.fdn.fr>,
    > Thomas Quinot <thomas@cuivre.fdn.fr> wrote:
    > >Now can we *please* drop this whole messages/animation/penguin noise
    > >and get back to real development ?
    >
    > >[patch with quoted-printable corruption snipped]
    >
    > Hey - who says the penguin business is just noise and not real
    > development?
    >
    > I now present to you, a real live penguin boot-logo, with the
    > following caveats:
    > o It's a complete hack. Use at your own risk.
    > o It does some nasty things to vga hardware, so although it will
    > probably work on most vga compatible hardware, ega may be
    > be pushing it a little. Working over a serial console is right
    > out - don't even try it.
    > o Other than that, dunno. Should work. I like it. YMMV.
    > The logo is the official Larry Ewing one.
    >
    >
    > John
    > --
    > i built it up now i take it apart climbed up real high now fall down real far
    > no need for me to stay the last thing left i just threw it away
    > i put my faith in god and my trust in you
    > now there's nothing more fucked up i could do
    > <p><a href="file:///dev/null">Me.</a>
    >
    >
    > *** linux/init/main.c.orig Mon May 20 18:33:57 1996
    > --- linux/init/main.c Wed Jun 19 21:50:37 1996
    > ***************
    > *** 63,68 ****
    > --- 63,70 ----
    > extern void init_IRQ(void);
    > extern void init_modules(void);
    > extern long console_init(long, long);
    > + extern void install_bootlogo(void);
    > + extern void remove_bootlogo(void);
    > extern long kmalloc_init(long,long);
    > extern void sock_init(void);
    > extern long pci_init(long, long);
    > ***************
    > *** 797,802 ****
    > --- 809,815 ----
    > memory_start += prof_len * sizeof(unsigned int);
    > }
    > memory_start = console_init(memory_start,memory_end);
    > + install_bootlogo();
    > #ifdef CONFIG_PCI
    > memory_start = pci_init(memory_start,memory_end);
    > #endif
    > ***************
    > *** 959,964 ****
    > --- 975,982 ----
    > (void) open("/dev/tty1",O_RDWR,0);
    > (void) dup(0);
    > (void) dup(0);
    > +
    > + remove_bootlogo();
    >
    > if (!execute_command) {
    > execve("/etc/init",argv_init,envp_init);
    > *** linux/drivers/char/console.c.orig Wed Jun 19 21:37:59 1996
    > --- linux/drivers/char/console.c Sat Jun 22 12:40:38 1996
    > ***************
    > *** 88,93 ****
    > --- 88,94 ----
    > #include <linux/sched.h>
    > #include <linux/timer.h>
    > #include <linux/interrupt.h>
    > + #include <linux/delay.h>
    > #include <linux/tty.h>
    > #include <linux/tty_flip.h>
    > #include <linux/config.h>
    > ***************
    > *** 181,186 ****
    > --- 182,190 ----
    > static int blankinterval = 10*60*HZ;
    > static int vesa_off_interval = 0;
    > static long blank_origin, blank__origin, unblank_origin;
    > + int pengon=0;
    > + void plot_penguin(void);
    > + void unplot_penguin(void);
    >
    >
    > #ifdef CONFIG_SERIAL_ECHO
    > ***************
    > *** 591,596 ****
    > --- 595,601 ----
    >
    > if (b > video_num_lines || t >= b)
    > return;
    > + if (pengon) unplot_penguin();
    > if (t || b != video_num_lines)
    > hardscroll = 0;
    > if (hardscroll) {
    > ***************
    > *** 645,650 ****
    > --- 650,656 ----
    > scr_writew(video_erase_char, d++);
    > }
    > }
    > + if (pengon) plot_penguin();
    > }
    >
    > void
    > ***************
    > *** 2310,2312 ****
    > --- 2316,2565 ----
    > {
    > return set_get_font (arg,0,video_mode_512ch);
    > }
    > +
    > +
    > + /*
    > + * Penguin boot-logo (grotty hack, use at own risk)
    > + * July 1996 J Sullivan <js10039@chiark.chu.cam.ac.uk>
    > + *
    > + * Logo graphic by Larry Ewing for Linux 2.0
    > + */
    > +
    > + #define PENG_H 118
    > + #define PENG_W 8
    > + #define PENGC (color_table[12])
    > + unsigned char pengfnt[944] =
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x01\x03\x1f\x60\x60\x60\x60\x70\x70\x70"
    > + "\x60\x60\x40\x70\x1f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x3f\x3f\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e"
    > + "\x0e\x0e\x3f\x00\x00\x00\x00\x00\x00\x00\x0f\x3f\x3f\x3f\x3f\x3f"
    > + "\x3f\x3f\x3e\x18\x10\x00"
    > +
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x01\x01\x03\x07\x07\x07\x0f\x0f\x1f\x1f\x1f\x3f\x3f\x3f"
    > + "\x7f\x7f\x7f\x07\x03\x81\x80\x80\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x80\xf8\x3f\x07\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x80\x80\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x0c"
    > + "\x0c\x0c\xfd\x00\x00\x00\x00\x00\x03\xff\xff\xff\xff\xff\xff\xfe"
    > + "\xf0\x80\x00\x00\x00\x00"
    > +
    > + "\x00\x00\x00\x01\x01\x03\x03\x03\x07\x07\x07\x07\x07\x07\x06\x07"
    > + "\x07\x07\x07\x07\x07\x07\x07\x03\x03\x07\x0e\x0e\x1c\x3c\x3c\x78"
    > + "\x78\xf8\xf8\xf0\xf0\xf0\xe0\xe0\xc0\xc0\xc0\x80\x80\x80\x80\x80"
    > + "\x80\x80\x00\x80\xc0\xe0\xf0\x78\x7c\x3f\x1f\x1f\x0f\x07\x06\x03"
    > + "\x03\x01\x01\x01\x03\x03\x9f\xff\xfc\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x60\xf0\xf0\x60\x00\x00\xf3\xf3\x70\x70\x70\x70\x70\x70"
    > + "\x70\x70\xfb\x00\x00\x00\x00\x01\xff\xff\xff\xff\xff\xff\xe0\x00"
    > + "\x00\x00\x00\x00\x00\x00"
    > +
    > + "\x00\x3f\x7f\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1f\x5f\xff\xee"
    > + "\xee\xf3\x80\x00\x00\x00\x80\xff\xf8\xe1\x7f\x3e\x18\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\x00\x00\x00"
    > + "\x60\xff\xbf\xbf\xff\xff\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xe1\xe1\xe1\xe1\xe1\xe1"
    > + "\xe1\xe1\xf3\x00\x00\x00\x00\xff\xff\xff\xff\xff\xf8\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00"
    > +
    > + "\x00\xc0\xf8\xff\xff\xf7\xff\xff\xff\xff\xff\xcf\x07\x77\x73\x6b"
    > + "\x7b\x7b\x1f\x07\x03\x1b\xe3\x17\xf7\xc3\x81\x01\x01\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x07"
    > + "\x1f\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x87\xcf\xc3\xc3\xc3\xc3\xc3\xc3"
    > + "\xc3\xc3\xf1\x00\x00\x00\x03\xff\xff\xff\xff\xf0\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00"
    > +
    > + "\x00\x00\x00\x00\x00\x80\xc0\xc0\xe0\xe0\xe0\xe0\xe0\xe0\xe0\xf0"
    > + "\xf0\xf0\xf0\xf0\xf0\xf8\xf8\xbc\xdc\xfe\xfe\xff\xff\xff\xff\x7f"
    > + "\x7f\x3f\x3d\x1e\x1e\x1f\x0f\x0f\x0f\x0f\x0f\x07\x07\x07\x07\x07"
    > + "\x02\x03\x07\x1f\x37\x33\x23\x21\x20\x20\x20\x30\x30\xb0\xb0\xb0"
    > + "\xf0\xf0\xf0\xe0\xf0\xf0\xfc\x3f\x1f\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x8f\x87\x87\x87\x87\x87\x87"
    > + "\x87\xff\xf7\x00\x00\x00\xff\xff\xff\xff\xf0\x00\x78\xcc\x4c\x08"
    > + "\x18\x30\x44\xfc\x00\x00"
    > +
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80\xc0\xc0"
    > + "\xe0\xf0\xf0\xf8\xfc\xfc\xfe\xfe\xbe\xbe\xbf\xbf\xbf\xbf\xff\x7f"
    > + "\x3f\xff\xff\xff\xfe\xfc\xf8\xf0\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x01\x07\x0e\x3c\xf0\xe0\xc0\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x0e\x07\x07\x03\x01\x01\x03"
    > + "\x06\x0c\xfe\x00\x00\x00\xff\xff\xff\xf0\x00\x00\x0f\x19\x19\x19"
    > + "\x19\x19\x99\xcf\x00\x00"
    > +
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x80"
    > + "\x80\x80\x00\x00\x00\x00\x80\xc0\x40\x40\x60\x78\x1c\x06\x02\x06"
    > + "\x1c\x70\xe0\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
    > + "\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x18\x30\xe0\xc0\xc0\xe0\xf0"
    > + "\x78\x38\x7e\x00\x00\x00\xfe\xfc\xc0\x00\x00\x00\x00\x80\x80\x80"
    > + "\x80\x80\x80\x00\x00\x00"
    > + ;
    > +
    > + unsigned char pengofnt[(PENG_H+32)*PENG_W],olfnt[16384];
    > + unsigned short olscr[PENG_W*((PENG_H+7)/8)];
    > + unsigned char pengop[17][3];
    > + int penguon=0,pengych,pengrch,peng9px;
    > +
    > + static inline void pdelay(unsigned long q)
    > + {
    > + unsigned long b,c;
    > +
    > + for ( b=0 ; b<q ; b++ ) for ( c=0 ; c<1 ; c++ ) SLOW_DOWN_IO;
    > + }
    > +
    > + void install_bootlogo(void)
    > + {
    > + int a,b,scan,ch;
    > +
    > + if (pengon) return;
    > +
    > + con_get_font(olfnt);
    > + pengrch = 0;
    > + for ( a=0,scan=0,ch=0x80 ; a<PENG_H ; a++,scan++ ) {
    > + if (scan==video_font_height) {
    > + scan=0;
    > + ch += PENG_W;
    > + if (a>=80 && !pengrch) pengrch = (ch-0x80)/PENG_W;
    > + }
    > + for ( b=0 ; b<PENG_W ; b++ ) {
    > + pengofnt[PENG_H*b+a] = olfnt[32*(ch+b)+scan];
    > + olfnt[32*(ch+b)+scan] = pengfnt[PENG_H*b+a];
    > + }
    > + }
    > + while (scan<video_font_height) {
    > + for ( b=0 ; b<PENG_W ; b++ ) {
    > + pengofnt[PENG_H*b+a] = olfnt[32*(ch+b)+scan];
    > + olfnt[32*(ch+b)+scan] = 0;
    > + }
    > + scan++;
    > + a++;
    > + }
    > + pengych = ((ch+PENG_W)-0x80)/PENG_W;
    > +
    > + con_set_font(olfnt,video_mode_512ch);
    > + outb(1,0x3c4);
    > + peng9px = inb(0x3c5);
    > + if ((peng9px&1)==0) {
    > + unsigned char t;
    > + outb(1,0x3c4);
    > + outb(peng9px ^ 1,0x3c5);
    > + inb(0x3da);
    > + outb(0x13,0x3c0);
    > + t = inb(0x3c1);
    > + inb(0x3da);
    > + outb(0x33,0x3c0);
    > + inb(0x3c1);
    > + inb(0x3da);
    > + outb(0x13,0x3c0);
    > + outb(t&0xf0,0x3c0);
    > + inb(0x3da);
    > + outb(0x33,0x3c0);
    > + outb(t&0xf0,0x3c0);
    > + peng9px = 1;
    > + } else peng9px = 0;
    > + pengon = 1;
    > + penguon = 0;
    > + plot_penguin();
    > + if (peng9px) pdelay(250000);
    > + con_get_cmap((unsigned char *)pengop);
    > + for ( b=0 ; b<3 ; b++ ) pengop[16][b] = pengop[PENGC][b];
    > + for ( ; pengop[PENGC][0]>3 ; pengop[PENGC][0]-=4 ) { con_set_cmap((unsigned char *)pengop); pdelay(1000); }
    > + for ( ; pengop[PENGC][1]<252 ; pengop[PENGC][1]+=4 ) { con_set_cmap((unsigned char *)pengop); pdelay(1000); }
    > + for ( ; pengop[PENGC][1]>3 ; pengop[PENGC][1]-=4 ) { con_set_cmap((unsigned char *)pengop); pdelay(1000); }
    > + for ( ; pengop[PENGC][2]<252 ; pengop[PENGC][2]+=4 ) { con_set_cmap((unsigned char *)pengop); pdelay(1000); }
    > + for ( ; pengop[PENGC][2]>3 ; pengop[PENGC][2]-=4 ) { con_set_cmap((unsigned char *)pengop); pdelay(1000); }
    > + for ( ; pengop[PENGC][0]<pengop[16][0] ; pengop[PENGC][0]+=4 ) { con_set_cmap((unsigned char *)pengop); pdelay(1000); }
    > + for ( b=0 ; b<3 ; b++ ) pengop[PENGC][b] = pengop[16][b];
    > + con_set_cmap((unsigned char *)pengop);
    > + }
    > +
    > + void plot_penguin(void)
    > + {
    > + int currcons=fg_console;
    > + int a,b;
    > + void *vp;
    > + unsigned short *sp,wcv;
    > +
    > + if (!pengon || penguon) return;
    > +
    > + vp = (void *)origin + 2*video_num_columns - 2*PENG_W;
    > + sp = olscr;
    > + wcv = 0x7080;
    > +
    > + for ( a=0 ; a<pengych ; a++ ) {
    > + if (a==pengrch) wcv = 0x7c00|(wcv&0xff);
    > + for ( b=0 ; b<2*PENG_W ; b+=2 ) {
    > + *sp++ = scr_readw(vp+b);
    > + scr_writew(wcv++,vp+b);
    > + }
    > + vp += 2*video_num_columns;
    > + }
    > + penguon = 1;
    > + }
    > +
    > + void unplot_penguin(void)
    > + {
    > + int a,b,currcons=fg_console;
    > + void *vp;
    > + unsigned short *sp;
    > +
    > + if (!pengon || !penguon) return;
    > +
    > + vp = (void *)origin + 2*video_num_columns - 2*PENG_W;
    > + sp = olscr;
    > +
    > + for ( a=0 ; a<pengych ; a++ ) {
    > + for ( b=0 ; b<2*PENG_W ; b+=2 ) {
    > + scr_writew(*sp++,vp+b);
    > + }
    > + vp += 2*video_num_columns;
    > + }
    > + penguon = 0;
    > + }
    > +
    > + void remove_bootlogo(void)
    > + {
    > + int a,b,scan,ch;
    > +
    > + if (!pengon) return;
    > +
    > + unplot_penguin();
    > + for ( a=0,scan=0,ch=0x80 ; ch<pengych+0x80 ; a++ ) {
    > + for ( b=0 ; b<PENG_W ; b++ ) {
    > + olfnt[32*(ch+b)+scan] = pengofnt[PENG_H*b+a];
    > + }
    > + if (++scan==video_font_height) {
    > + scan = 0;
    > + ch += PENG_W;
    > + }
    > + }
    > + con_set_font(olfnt,video_mode_512ch);
    > + if (peng9px) {
    > + unsigned char t;
    > +
    > + outb(1,0x3c4);
    > + peng9px = inb(0x3c5);
    > + outb(1,0x3c4);
    > + outb(peng9px ^ 1,0x3c5);
    > + inb(0x3da);
    > + outb(0x13,0x3c0);
    > + t = inb(0x3c1);
    > + inb(0x3da);
    > + outb(0x33,0x3c0);
    > + inb(0x3c1);
    > + inb(0x3da);
    > + outb(0x13,0x3c0);
    > + outb((t&0xf0)|8,0x3c0);
    > + inb(0x3da);
    > + outb(0x33,0x3c0);
    > + outb((t&0xf0)|8,0x3c0);
    > + udelay(1000000);
    > + }
    > + pengon = 0;
    > + }
    > +
    > +
    >

    I get parser errors compiling... oh well....

    --
    Jeff Johnson GCS d- s: !a C+++ UA++(+++) P+ L+
    trn@gate.net E---- W+++ N+++(+++++) K- w(+) O(-)
    KE4QWX M- V-(--) PS+ PE Y++ PGP+++(+++++) t-
    http://www.gate.net/~trn 5 X+++(+++++) R tv+ b++ DI-- D G++ e* !h r y?
    Nerdity Test = 66% Hacker Test = 45%
    1024/3397E001 1995/06/10 5B 92 8B 34 84 E9 42 26 DC FB F7 C4 1E 0E 80 29



    \
     
     \ /
      Last update: 2005-03-22 13:37    [W:0.046 / U:8.332 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site