1 /* $NetBSD: ite_subr.c,v 1.1 1997/02/04 03:52:36 thorpej Exp $ */ 2 3 /* 4 * Copyright (c) 1988 University of Utah. 5 * Copyright (c) 1990, 1993 6 * The Regents of the University of California. All rights reserved. 7 * 8 * This code is derived from software contributed to Berkeley by 9 * the Systems Programming Group of the University of Utah Computer 10 * Science Department. 11 * 12 * Redistribution and use in source and binary forms, with or without 13 * modification, are permitted provided that the following conditions 14 * are met: 15 * 1. Redistributions of source code must retain the above copyright 16 * notice, this list of conditions and the following disclaimer. 17 * 2. Redistributions in binary form must reproduce the above copyright 18 * notice, this list of conditions and the following disclaimer in the 19 * documentation and/or other materials provided with the distribution. 20 * 3. All advertising materials mentioning features or use of this software 21 * must display the following acknowledgement: 22 * This product includes software developed by the University of 23 * California, Berkeley and its contributors. 24 * 4. Neither the name of the University nor the names of its contributors 25 * may be used to endorse or promote products derived from this software 26 * without specific prior written permission. 27 * 28 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 29 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 30 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 31 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 32 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 33 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 34 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 36 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 37 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 38 * SUCH DAMAGE. 39 * 40 * from: Utah $Hdr: ite_subr.c 1.2 92/01/20$ 41 * 42 * @(#)ite_subr.c 8.1 (Berkeley) 6/10/93 43 */ 44 45 #ifdef ITECONSOLE 46 47 #include <sys/param.h> 48 49 #include <hp300/dev/itereg.h> 50 51 #include <hp300/stand/common/samachdep.h> 52 #include <hp300/stand/common/itevar.h> 53 54 ite_fontinfo(ip) 55 struct ite_data *ip; 56 { 57 u_long fontaddr = getword(ip, getword(ip, FONTROM) + FONTADDR); 58 59 ip->ftheight = getbyte(ip, fontaddr + FONTHEIGHT); 60 ip->ftwidth = getbyte(ip, fontaddr + FONTWIDTH); 61 ip->rows = ip->dheight / ip->ftheight; 62 ip->cols = ip->dwidth / ip->ftwidth; 63 64 if (ip->fbwidth > ip->dwidth) { 65 /* 66 * Stuff goes to right of display. 67 */ 68 ip->fontx = ip->dwidth; 69 ip->fonty = 0; 70 ip->cpl = (ip->fbwidth - ip->dwidth) / ip->ftwidth; 71 ip->cblankx = ip->dwidth; 72 ip->cblanky = ip->fonty + ((128 / ip->cpl) +1) * ip->ftheight; 73 } 74 else { 75 /* 76 * Stuff goes below the display. 77 */ 78 ip->fontx = 0; 79 ip->fonty = ip->dheight; 80 ip->cpl = ip->fbwidth / ip->ftwidth; 81 ip->cblankx = 0; 82 ip->cblanky = ip->fonty + ((128 / ip->cpl) + 1) * ip->ftheight; 83 } 84 } 85 86 ite_fontinit(ip) 87 register struct ite_data *ip; 88 { 89 int bytewidth = (((ip->ftwidth - 1) / 8) + 1); 90 int glyphsize = bytewidth * ip->ftheight; 91 u_char fontbuf[500]; 92 u_char *dp, *fbmem; 93 int c, i, romp; 94 95 romp = getword(ip, getword(ip, FONTROM) + FONTADDR) + FONTDATA; 96 for (c = 0; c < 128; c++) { 97 fbmem = (u_char *) 98 (FBBASE + 99 (ip->fonty + (c / ip->cpl) * ip->ftheight) * ip->fbwidth + 100 (ip->fontx + (c % ip->cpl) * ip->ftwidth)); 101 dp = fontbuf; 102 for (i = 0; i < glyphsize; i++) { 103 *dp++ = getbyte(ip, romp); 104 romp += 2; 105 } 106 writeglyph(ip, fbmem, fontbuf); 107 } 108 } 109 110 /* 111 * Display independent versions of the readbyte and writeglyph routines. 112 */ 113 u_char 114 ite_readbyte(ip, disp) 115 struct ite_data *ip; 116 int disp; 117 { 118 return((u_char) *(((u_char *)ip->regbase) + disp)); 119 } 120 121 void 122 ite_writeglyph(ip, fbmem, glyphp) 123 register struct ite_data *ip; 124 register u_char *fbmem, *glyphp; 125 { 126 register int bn; 127 int c, l, b; 128 129 for (l = 0; l < ip->ftheight; l++) { 130 bn = 7; 131 for (b = 0; b < ip->ftwidth; b++) { 132 if ((1 << bn) & *glyphp) 133 *fbmem++ = 1; 134 else 135 *fbmem++ = 0; 136 if (--bn < 0) { 137 bn = 7; 138 glyphp++; 139 } 140 } 141 if (bn < 7) 142 glyphp++; 143 fbmem -= ip->ftwidth; 144 fbmem += ip->fbwidth; 145 } 146 } 147 #endif 148