* Copyright (c) 1988 University of Utah.
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
* This code is derived from software contributed to Berkeley by
* the Systems Programming Group of the University of Utah Computer
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* from: Utah $Hdr: ite.c 1.24 93/06/25$
* @(#)ite.c 8.1 (Berkeley) 7/8/93
* Standalone Internal Terminal Emulator (CRT and keyboard)
#include <hp300/stand/samachdep.h>
#include <hp/dev/device.h>
#include <hp/dev/itevar.h>
#include <hp/dev/grfreg.h>
extern u_char
ite_readbyte();
extern int ite_writeglyph();
extern int topcat_init(), topcat_putc();
extern int topcat_clear(), topcat_cursor(), topcat_scroll();
extern int gbox_init(), gbox_clear();
extern int gbox_putc(), gbox_cursor(), gbox_scroll();
extern int rbox_init(), rbox_clear();
extern int rbox_putc(), rbox_cursor(), rbox_scroll();
extern int dvbox_init(), dvbox_clear();
extern int dvbox_putc(), dvbox_cursor(), dvbox_scroll();
extern int hyper_init(), hyper_clear();
extern int hyper_putc(), hyper_cursor(), hyper_scroll();
topcat_init
, nodev
, topcat_clear
, topcat_putc
,
topcat_cursor
, topcat_scroll
, ite_readbyte
, ite_writeglyph
,
gbox_init
, nodev
, gbox_clear
, gbox_putc
,
gbox_cursor
, gbox_scroll
, ite_readbyte
, ite_writeglyph
,
rbox_init
, nodev
, rbox_clear
, rbox_putc
,
rbox_cursor
, rbox_scroll
, ite_readbyte
, ite_writeglyph
,
topcat_init
, nodev
, topcat_clear
, topcat_putc
,
topcat_cursor
, topcat_scroll
, ite_readbyte
, ite_writeglyph
,
topcat_init
, nodev
, topcat_clear
, topcat_putc
,
topcat_cursor
, topcat_scroll
, ite_readbyte
, ite_writeglyph
,
topcat_init
, nodev
, topcat_clear
, topcat_putc
,
topcat_cursor
, topcat_scroll
, ite_readbyte
, ite_writeglyph
,
dvbox_init
, nodev
, dvbox_clear
, dvbox_putc
,
dvbox_cursor
, dvbox_scroll
, ite_readbyte
, ite_writeglyph
,
hyper_init
, nodev
, hyper_clear
, hyper_putc
,
hyper_cursor
, hyper_scroll
, ite_readbyte
, ite_writeglyph
,
int nitesw
= sizeof(itesw
) / sizeof(itesw
[0]);
/* these guys need to be in initialized data */
struct ite_softc ite_softc
[NITE
] = { 0 };
* Locate all bitmapped displays
extern struct hp_hw sc_table
[];
for (hw
= sc_table
; hw
< &sc_table
[MAXCTLRS
]; hw
++) {
if (!HW_ISDEV(hw
, D_BITMAP
))
gr
= (struct grfreg
*) hw
->hw_kva
;
/* XXX: redundent but safe */
if (badaddr((caddr_t
)gr
) || gr
->gr_id
!= GRFHWID
)
for (dtype
= 0; dtype
< nitesw
; dtype
++)
if (itesw
[dtype
].ite_hwid
== gr
->gr_id2
)
ip
->regbase
= (caddr_t
) gr
;
fboff
= (gr
->gr_fbomsb
<< 8) | gr
->gr_fbolsb
;
ip
->fbbase
= (caddr_t
) (*((u_char
*)ip
->regbase
+fboff
) << 16);
/* DIO II: FB offset is relative to select code space */
if (ip
->regbase
>= (caddr_t
)DIOIIBASE
)
ip
->fbbase
+= (int)ip
->regbase
;
ip
->fbwidth
= gr
->gr_fbwidth_h
<< 8 | gr
->gr_fbwidth_l
;
ip
->fbheight
= gr
->gr_fbheight_h
<< 8 | gr
->gr_fbheight_l
;
ip
->dwidth
= gr
->gr_dwidth_h
<< 8 | gr
->gr_dwidth_l
;
ip
->dheight
= gr
->gr_dheight_h
<< 8 | gr
->gr_dheight_l
;
* XXX some displays (e.g. the davinci) appear
* to return a display height greater than the
* returned FB height. Guess we should go back
* to getting the display dimensions from the
if (ip
->dwidth
> ip
->fbwidth
)
ip
->dwidth
= ip
->fbwidth
;
if (ip
->dheight
> ip
->fbheight
)
ip
->dheight
= ip
->fbheight
;
ip
->flags
= ITE_ALIVE
|ITE_CONSOLE
;
* Allows us to cycle through all possible consoles (NITE ites and serial port)
* by using SHIFT-RESET on the keyboard.
register struct ite_softc
*ip
;
whichconsole
= ++whichconsole
% (NITE
+1);
for (ite
= 0; ite
< NITE
; ite
++) {
if ((ip
->flags
& (ITE_ALIVE
|ITE_CONSOLE
))
!= (ITE_ALIVE
|ITE_CONSOLE
))
if ((int)ip
->regbase
== GRFIADDR
) {
(*ip
->isw
->ite_init
)(ip
);
(*ip
->isw
->ite_cursor
)(ip
, DRAW_CURSOR
);
register struct ite_softc
*ip
= &ite_softc
[itecons
];
register struct itesw
*sp
= ip
->isw
;
if (++ip
->cury
== ip
->rows
) {
(*sp
->ite_scroll
)(ip
, 1, 0, 1, SCROLL_UP
);
ite_clrtoeol(ip
, sp
, ip
->cury
, 0);
(*sp
->ite_cursor
)(ip
, MOVE_CURSOR
);
(*sp
->ite_cursor
)(ip
, MOVE_CURSOR
);
(*sp
->ite_cursor
)(ip
, MOVE_CURSOR
);
if (c
< ' ' || c
== 0177)
(*sp
->ite_putc
)(ip
, c
, ip
->cury
, ip
->curx
, ATTR_NOR
);
(*sp
->ite_cursor
)(ip
, DRAW_CURSOR
);
register struct ite_softc
*ip
;
register struct itesw
*sp
;
if (++ip
->curx
== ip
->cols
) {
if (++ip
->cury
== ip
->rows
) {
(*sp
->ite_scroll
)(ip
, 1, 0, 1, SCROLL_UP
);
ite_clrtoeol(ip
, sp
, ip
->cury
, 0);
(*sp
->ite_cursor
)(ip
, MOVE_CURSOR
);
ite_clrtoeol(ip
, sp
, y
, x
)
register struct ite_softc
*ip
;
register struct itesw
*sp
;
(*sp
->ite_clear
)(ip
, y
, x
, 1, ip
->cols
- x
);
(*sp
->ite_cursor
)(ip
, DRAW_CURSOR
);