consio.c revision 1.1 1 1.1 minoura /* $NetBSD: consio.c,v 1.1 2001/09/27 10:03:27 minoura Exp $ */
2 1.1 minoura
3 1.1 minoura /*
4 1.1 minoura * Copyright (c) 2001 MINOURA Makoto.
5 1.1 minoura * All rights reserved.
6 1.1 minoura *
7 1.1 minoura * Redistribution and use in source and binary forms, with or without
8 1.1 minoura * modification, are permitted provided that the following conditions
9 1.1 minoura * are met:
10 1.1 minoura * 1. Redistributions of source code must retain the above copyright
11 1.1 minoura * notice, this list of conditions and the following disclaimer.
12 1.1 minoura * 2. Redistributions in binary form must reproduce the above copyright
13 1.1 minoura * notice, this list of conditions and the following disclaimer in the
14 1.1 minoura * documentation and/or other materials provided with the distribution.
15 1.1 minoura *
16 1.1 minoura * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 1.1 minoura * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 1.1 minoura * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 1.1 minoura * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 1.1 minoura * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 1.1 minoura * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 1.1 minoura * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 1.1 minoura * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 1.1 minoura * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 1.1 minoura * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 1.1 minoura */
27 1.1 minoura
28 1.1 minoura #include <machine/stdarg.h>
29 1.1 minoura #include <lib/libsa/stand.h>
30 1.1 minoura
31 1.1 minoura #include "libx68k.h"
32 1.1 minoura
33 1.1 minoura #include "iocs.h"
34 1.1 minoura #include "consio.h"
35 1.1 minoura
36 1.1 minoura enum {
37 1.1 minoura ITE = 0,
38 1.1 minoura SERIAL = 1,
39 1.1 minoura } x68k_console_device;
40 1.1 minoura
41 1.1 minoura int
42 1.1 minoura consio_init(int device)
43 1.1 minoura {
44 1.1 minoura if (device < 0) { /* undetemined yet */
45 1.1 minoura if (KEYCTRL & 8)
46 1.1 minoura device = ITE;
47 1.1 minoura else {
48 1.1 minoura IOCS_B_PRINT ("No keyboard; "
49 1.1 minoura "switching to serial console...");
50 1.1 minoura device = SERIAL;
51 1.1 minoura }
52 1.1 minoura }
53 1.1 minoura
54 1.1 minoura switch (device) {
55 1.1 minoura case ITE:
56 1.1 minoura x68k_console_device = ITE;
57 1.1 minoura /* set palette here */
58 1.1 minoura IOCS_OS_CURON ();
59 1.1 minoura break;
60 1.1 minoura case SERIAL:
61 1.1 minoura x68k_console_device = SERIAL;
62 1.1 minoura IOCS_OS_CUROF ();
63 1.1 minoura IOCS_SET232C (SERPARAM);
64 1.1 minoura }
65 1.1 minoura
66 1.1 minoura return x68k_console_device;
67 1.1 minoura }
68 1.1 minoura
69 1.1 minoura int
70 1.1 minoura getchar (void)
71 1.1 minoura {
72 1.1 minoura int r;
73 1.1 minoura
74 1.1 minoura switch (x68k_console_device) {
75 1.1 minoura case ITE:
76 1.1 minoura while ((r = IOCS_B_KEYINP () & 0xff) == 0);
77 1.1 minoura return r;
78 1.1 minoura case SERIAL:
79 1.1 minoura while ((r = IOCS_INP232C () & 0xff) == 0);
80 1.1 minoura return r;
81 1.1 minoura }
82 1.1 minoura
83 1.1 minoura return -1;
84 1.1 minoura }
85 1.1 minoura
86 1.1 minoura void
87 1.1 minoura putchar (int c)
88 1.1 minoura {
89 1.1 minoura if (c == '\n')
90 1.1 minoura putchar('\r');
91 1.1 minoura switch (x68k_console_device) {
92 1.1 minoura case ITE:
93 1.1 minoura IOCS_B_PUTC (c);
94 1.1 minoura case SERIAL:
95 1.1 minoura IOCS_OUT232C (c);
96 1.1 minoura }
97 1.1 minoura }
98 1.1 minoura
99 1.1 minoura int
100 1.1 minoura check_getchar (void)
101 1.1 minoura {
102 1.1 minoura switch (x68k_console_device) {
103 1.1 minoura case ITE:
104 1.1 minoura return IOCS_B_KEYSNS () & 0xff;
105 1.1 minoura case SERIAL:
106 1.1 minoura return IOCS_ISNS232C () & 0xff;
107 1.1 minoura }
108 1.1 minoura
109 1.1 minoura return -1;
110 1.1 minoura }
111 1.1 minoura
112 1.1 minoura int
113 1.1 minoura awaitkey_1sec (void)
114 1.1 minoura {
115 1.1 minoura int i, c;
116 1.1 minoura
117 1.1 minoura while (check_getchar())
118 1.1 minoura getchar();
119 1.1 minoura
120 1.1 minoura for (i = 0; i < 100 && (c = check_getchar()) == 0; i++) {
121 1.1 minoura while (MFP_TIMERC > 100)
122 1.1 minoura (void) JOYA;
123 1.1 minoura while (MFP_TIMERC <= 100)
124 1.1 minoura (void) JOYA;
125 1.1 minoura }
126 1.1 minoura
127 1.1 minoura while (check_getchar())
128 1.1 minoura getchar();
129 1.1 minoura
130 1.1 minoura return c;
131 1.1 minoura }
132 1.1 minoura
133 1.1 minoura __dead void
134 1.1 minoura panic(const char *fmt,...)
135 1.1 minoura {
136 1.1 minoura va_list ap;
137 1.1 minoura
138 1.1 minoura va_start(ap, fmt);
139 1.1 minoura
140 1.1 minoura printf(fmt, ap);
141 1.1 minoura printf("\n");
142 1.1 minoura va_end(ap);
143 1.1 minoura
144 1.1 minoura exit(1);
145 1.1 minoura }
146 1.1 minoura
147 1.1 minoura void
148 1.1 minoura print_title(const char *fmt, ...)
149 1.1 minoura {
150 1.1 minoura va_list ap;
151 1.1 minoura
152 1.1 minoura /* Print the logo image here */
153 1.1 minoura
154 1.1 minoura va_start(ap, fmt);
155 1.1 minoura printf(fmt, ap);
156 1.1 minoura printf("\n");
157 1.1 minoura va_end(ap);
158 1.1 minoura }
159