sh_console.cpp revision 1.5 1 1.5 uch /* -*-C++-*- $NetBSD: sh_console.cpp,v 1.5 2001/04/24 19:28:01 uch Exp $ */
2 1.1 uch
3 1.1 uch /*-
4 1.1 uch * Copyright (c) 2001 The NetBSD Foundation, Inc.
5 1.1 uch * All rights reserved.
6 1.1 uch *
7 1.1 uch * This code is derived from software contributed to The NetBSD Foundation
8 1.1 uch * by UCHIYAMA Yasushi.
9 1.1 uch *
10 1.1 uch * Redistribution and use in source and binary forms, with or without
11 1.1 uch * modification, are permitted provided that the following conditions
12 1.1 uch * are met:
13 1.1 uch * 1. Redistributions of source code must retain the above copyright
14 1.1 uch * notice, this list of conditions and the following disclaimer.
15 1.1 uch * 2. Redistributions in binary form must reproduce the above copyright
16 1.1 uch * notice, this list of conditions and the following disclaimer in the
17 1.1 uch * documentation and/or other materials provided with the distribution.
18 1.1 uch * 3. All advertising materials mentioning features or use of this software
19 1.1 uch * must display the following acknowledgement:
20 1.1 uch * This product includes software developed by the NetBSD
21 1.1 uch * Foundation, Inc. and its contributors.
22 1.1 uch * 4. Neither the name of The NetBSD Foundation nor the names of its
23 1.1 uch * contributors may be used to endorse or promote products derived
24 1.1 uch * from this software without specific prior written permission.
25 1.1 uch *
26 1.1 uch * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
27 1.1 uch * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28 1.1 uch * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29 1.1 uch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
30 1.1 uch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31 1.1 uch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32 1.1 uch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33 1.1 uch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34 1.1 uch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35 1.1 uch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36 1.1 uch * POSSIBILITY OF SUCH DAMAGE.
37 1.1 uch */
38 1.1 uch
39 1.2 uch #include <hpcmenu.h>
40 1.1 uch #include <sh3/sh_console.h>
41 1.4 uch #include <sh3/hd64461.h>
42 1.1 uch
43 1.3 uch #define BI_CNUSE_SCI 2
44 1.3 uch #define BI_CNUSE_SCIF 3
45 1.3 uch #define BI_CNUSE_HD64461COM 4
46 1.3 uch
47 1.1 uch SHConsole *SHConsole::_instance = 0;
48 1.1 uch
49 1.2 uch struct SHConsole::console_info
50 1.2 uch SHConsole::_console_info[] = {
51 1.4 uch { PLATID_CPU_SH_3 , PLATID_MACH_HP , SCIFPrint , BI_CNUSE_SCIF },
52 1.4 uch { PLATID_CPU_SH_3_7709 , PLATID_MACH_HITACHI , HD64461COMPrint , BI_CNUSE_HD64461COM },
53 1.4 uch { PLATID_CPU_SH_3_7709 , PLATID_MACH_CASIO_CASSIOPEIAA_A55V , 0 , BI_CNUSE_BUILTIN },
54 1.2 uch { 0, 0, 0 } // terminator.
55 1.2 uch };
56 1.2 uch
57 1.2 uch SHConsole::SHConsole()
58 1.2 uch {
59 1.2 uch _print = 0;
60 1.2 uch }
61 1.2 uch
62 1.2 uch SHConsole::~SHConsole()
63 1.2 uch {
64 1.2 uch }
65 1.2 uch
66 1.2 uch SHConsole *
67 1.2 uch SHConsole::Instance()
68 1.2 uch {
69 1.2 uch if (!_instance)
70 1.2 uch _instance = new SHConsole();
71 1.2 uch
72 1.2 uch return _instance;
73 1.2 uch }
74 1.2 uch
75 1.2 uch BOOL
76 1.2 uch SHConsole::init()
77 1.2 uch {
78 1.2 uch struct console_info *tab = _console_info;
79 1.4 uch platid_mask_t target, entry;
80 1.2 uch
81 1.5 uch if (!super::init())
82 1.5 uch return FALSE;
83 1.5 uch
84 1.2 uch _kmode = SetKMode(1);
85 1.2 uch
86 1.5 uch target.dw.dw0 = HPC_PREFERENCE.platid_hi;
87 1.5 uch target.dw.dw1 = HPC_PREFERENCE.platid_lo;
88 1.2 uch
89 1.4 uch // search apriori setting if any.
90 1.2 uch for (; tab->cpu; tab++) {
91 1.4 uch entry.dw.dw0 = tab->cpu;
92 1.4 uch entry.dw.dw1 = tab->machine;
93 1.4 uch if (platid_match(&target, &entry)) {
94 1.2 uch _print = tab->print;
95 1.3 uch _boot_console = tab->boot_console;
96 1.2 uch break;
97 1.2 uch }
98 1.2 uch }
99 1.2 uch
100 1.5 uch return TRUE;
101 1.2 uch }
102 1.2 uch
103 1.1 uch void
104 1.1 uch SHConsole::print(const TCHAR *fmt, ...)
105 1.1 uch {
106 1.5 uch SETUP_WIDECHAR_BUFFER();
107 1.1 uch
108 1.5 uch if (!setupMultibyteBuffer())
109 1.1 uch return;
110 1.1 uch
111 1.4 uch if (_print == 0)
112 1.5 uch super::genericPrint(_bufm);
113 1.4 uch else
114 1.4 uch _print(_bufm);
115 1.4 uch }
116 1.4 uch
117 1.4 uch void
118 1.4 uch SHConsole::SCIPrint(const char *buf)
119 1.4 uch {
120 1.4 uch SCI_PRINT(buf);
121 1.1 uch }
122 1.2 uch
123 1.2 uch void
124 1.2 uch SHConsole::SCIFPrint(const char *buf)
125 1.2 uch {
126 1.2 uch SCIF_PRINT(buf);
127 1.2 uch }
128 1.4 uch
129 1.4 uch void
130 1.4 uch SHConsole::HD64461COMPrint(const char *buf)
131 1.4 uch {
132 1.4 uch HD64461COM_PRINT(buf);
133 1.4 uch }
134 1.4 uch
135 1.2 uch
136