Date: Wed, 20 Mar 1996 20:24:39 -0800 (PST) From: "Doug Ambrisko" <ambrisko@ambrisko.roble.com> To: freebsd-current@freebsd.org Subject: Dual biosboot patches Message-ID: <199603210424.UAA13939@freebsd.ambrisko.com>
next in thread | raw e-mail | index | archive | help
Here are the patches to support the bios boot prompt messages on both the serial and graphics console at the same time. Input and output is echoed to both devices. At this time no probe is done for com1 which could be a problem. This code should work okay with a mouse on COM1 since it filters out any non-printable ascii characters. Doug A. *** Makefile Fri Mar 8 01:43:54 1996 --- makefile Sun Mar 17 19:27:24 1996 *************** *** 3,10 **** PROG= boot # Order is very important on the SRCS line for this prog ! SRCS= start.S table.c boot2.S boot.c asm.S bios.S serial.S ! SRCS+= probe_keyboard.c io.c disk.c sys.c BINDIR= /usr/mdec BINMODE= 444 --- 3,10 ---- PROG= boot # Order is very important on the SRCS line for this prog ! SRCS= start.S table.c boot2.S boot.c asm.S bios.S serial.S ! SRCS+= probe_keyboard.c io.c disk.c sys.c BINDIR= /usr/mdec BINMODE= 444 *************** *** 15,20 **** --- 15,21 ---- # Probe the keyboard and use the serial console if the keyboard isn't found. #CFLAGS+= -DPROBE_KEYBOARD + CFLAGS+= -DDUAL_PROMPT # Force use of the serial console (after probing the keyboard if # PROBE_KEYBOARD is defined). *** boot.c Fri Mar 8 01:43:54 1996 --- boot.mod.c Sun Mar 17 21:40:41 1996 *************** *** 75,80 **** --- 75,83 ---- { int ret; + #ifdef DUAL_PROMPT + init_serial(); + #endif #ifdef PROBE_KEYBOARD if (probe_keyboard()) { init_serial(); *** io.c Fri Mar 8 01:43:54 1996 --- io.mod.c Sun Mar 17 21:35:49 1996 *************** *** 121,126 **** --- 121,134 ---- void putchar(int c) { + #ifdef DUAL_PROMPT + if (c == '\n') { + serial_putc('\r'); + putc('\r'); + } + serial_putc(c); + putc(c); + #else if (c == '\n') { if (loadflags & RB_SERIAL) serial_putc('\r'); *************** *** 131,136 **** --- 139,145 ---- serial_putc(c); else putc(c); + #endif } int *************** *** 139,145 **** int c; loop: ! if ((c = ((loadflags & RB_SERIAL) ? serial_getc() : getc())) == '\r') c = '\n'; if (c == '\b') { if (in_buf != 0) { --- 148,168 ---- int c; loop: ! #ifdef DUAL_PROMPT ! if(serial_ischar()){ ! c=serial_getc(); ! /* ignore bad characters that may come from the mouse */ ! if (!( (c>=32 && c<=127) || ! c == '\n' || c == '\r' || c == 8 )) goto loop; ! } else if(ischar()) { ! c=getc(); ! } else { ! goto loop; ! } ! #else ! c = ((loadflags & RB_SERIAL) ? serial_getc() : getc()) ! #endif ! if (c == '\r') c = '\n'; if (c == '\b') { if (in_buf != 0) { *************** *** 199,205 **** --- 222,232 ---- for (initial_bios_tick = bios_tick; bios_tick - initial_bios_tick < BOOTWAIT / BIOS_TICK_MS;) #endif + #ifdef DUAL_PROMPT + if (serial_ischar() || ischar()) + #else if ((loadflags & RB_SERIAL) ? serial_ischar() : ischar()) + #endif for (;;) { switch(*ptr = getchar(ptr - buf) & 0xff) { case '\n': *************** *** 217,223 **** --- 244,254 ---- #error "TIMEOUT without BOOTWAIT" #endif for (initial_bios_tick = bios_tick;;) { + #ifdef DUAL_PROMPT + if (serial_ischar() || ischar()) + #else if ((loadflags & RB_SERIAL) ? + #endif serial_ischar() : ischar()) break; if (bios_tick - initial_bios_tick >=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199603210424.UAA13939>