|
|
1.1.1.2 root 1: /*
1.1 root 2: * Copyright (c) 1995-1994 The University of Utah and
3: * the Computer Systems Laboratory at the University of Utah (CSL).
4: * All rights reserved.
5: *
6: * Permission to use, copy, modify and distribute this software is hereby
7: * granted provided that (1) source code retains these copyright, permission,
8: * and disclaimer notices, and (2) redistributions including binaries
9: * reproduce the notices in supporting documentation, and (3) all advertising
10: * materials mentioning features or use of this software display the following
11: * acknowledgement: ``This product includes software developed by the
12: * Computer Systems Laboratory at the University of Utah.''
13: *
14: * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
15: * IS" CONDITION. THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
16: * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
17: *
18: * CSL requests users of this software to return to [email protected] any
19: * improvements that they make and grant CSL redistribution rights.
20: *
21: * Author: Bryan Ford, University of Utah CSL
22: */
23:
24: #ifdef ENABLE_IMMEDIATE_CONSOLE
25:
1.1.1.3 ! root 26: #include <string.h>
! 27:
1.1 root 28: /* This is a special "feature" (read: kludge)
29: intended for use only for kernel debugging.
30: It enables an extremely simple console output mechanism
31: that sends text straight to CGA/EGA/VGA video memory.
32: It has the nice property of being functional right from the start,
33: so it can be used to debug things that happen very early
34: before any devices are initialized. */
35:
36: int immediate_console_enable = 1;
37:
38: void
39: immc_cnputc(unsigned char c)
40: {
41: static int ofs = -1;
42:
43: if (!immediate_console_enable)
44: return;
45: if (ofs < 0)
46: {
47: ofs = 0;
48: immc_cnputc('\n');
49: }
50: else if (c == '\n')
51: {
1.1.1.3 ! root 52: memmove(0xb8000, 0xb8000+80*2, 80*2*24);
! 53: memset(0xb8000+80*2*24, 0, 80*2);
1.1 root 54: ofs = 0;
55: }
56: else
57: {
58: volatile unsigned char *p;
59:
60: if (ofs >= 80)
61: {
62: immc_cnputc('\r');
63: immc_cnputc('\n');
64: }
65:
66: p = (void*)0xb8000 + 80*2*24 + ofs*2;
67: p[0] = c;
68: p[1] = 0x0f;
69: ofs++;
70: }
71: }
72:
73: int immc_cnmaygetc(void)
74: {
75: return -1;
76: }
77:
1.1.1.2 root 78: #endif /* ENABLE_IMMEDIATE_CONSOLE */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.