141488Smckusick /* 241488Smckusick * Copyright (c) 1988 University of Utah. 341488Smckusick * Copyright (c) 1990 The Regents of the University of California. 441488Smckusick * All rights reserved. 541488Smckusick * 641488Smckusick * This code is derived from software contributed to Berkeley by 741488Smckusick * the Systems Programming Group of the University of Utah Computer 841488Smckusick * Science Department. 941488Smckusick * 1041488Smckusick * %sccs.include.redist.c% 1141488Smckusick * 12*54073Shibler * from: Utah $Hdr: ite_subr.c 1.2 92/01/20$ 1341488Smckusick * 14*54073Shibler * @(#)ite_subr.c 7.3 (Berkeley) 06/18/92 1541488Smckusick */ 1641488Smckusick 1741488Smckusick #include "samachdep.h" 1841488Smckusick 1941488Smckusick #ifdef ITECONSOLE 2041488Smckusick 2145790Sbostic #include "sys/param.h" 22*54073Shibler #include "hp/dev/itevar.h" 23*54073Shibler #include "hp/dev/itereg.h" 2441488Smckusick 25*54073Shibler ite_fontinfo(ip) 2641488Smckusick struct ite_softc *ip; 2741488Smckusick { 28*54073Shibler u_long fontaddr = getword(ip, getword(ip, FONTROM) + FONTADDR); 2941488Smckusick 30*54073Shibler ip->ftheight = getbyte(ip, fontaddr + FONTHEIGHT); 31*54073Shibler ip->ftwidth = getbyte(ip, fontaddr + FONTWIDTH); 3241488Smckusick ip->rows = ip->dheight / ip->ftheight; 3341488Smckusick ip->cols = ip->dwidth / ip->ftwidth; 3441488Smckusick 3541488Smckusick if (ip->fbwidth > ip->dwidth) { 3641488Smckusick /* 3741488Smckusick * Stuff goes to right of display. 3841488Smckusick */ 3941488Smckusick ip->fontx = ip->dwidth; 4041488Smckusick ip->fonty = 0; 4141488Smckusick ip->cpl = (ip->fbwidth - ip->dwidth) / ip->ftwidth; 4241488Smckusick ip->cblankx = ip->dwidth; 4341488Smckusick ip->cblanky = ip->fonty + ((128 / ip->cpl) +1) * ip->ftheight; 4441488Smckusick } 4541488Smckusick else { 4641488Smckusick /* 4741488Smckusick * Stuff goes below the display. 4841488Smckusick */ 4941488Smckusick ip->fontx = 0; 5041488Smckusick ip->fonty = ip->dheight; 5141488Smckusick ip->cpl = ip->fbwidth / ip->ftwidth; 5241488Smckusick ip->cblankx = 0; 5341488Smckusick ip->cblanky = ip->fonty + ((128 / ip->cpl) + 1) * ip->ftheight; 5441488Smckusick } 5541488Smckusick } 5641488Smckusick 5741488Smckusick ite_fontinit(ip) 5841488Smckusick register struct ite_softc *ip; 5941488Smckusick { 60*54073Shibler int bytewidth = (((ip->ftwidth - 1) / 8) + 1); 61*54073Shibler int glyphsize = bytewidth * ip->ftheight; 62*54073Shibler u_char fontbuf[500]; 63*54073Shibler u_char *dp, *fbmem; 64*54073Shibler int c, i, romp; 65*54073Shibler 66*54073Shibler romp = getword(ip, getword(ip, FONTROM) + FONTADDR) + FONTDATA; 67*54073Shibler for (c = 0; c < 128; c++) { 68*54073Shibler fbmem = (u_char *) 69*54073Shibler (FBBASE + 70*54073Shibler (ip->fonty + (c / ip->cpl) * ip->ftheight) * ip->fbwidth + 71*54073Shibler (ip->fontx + (c % ip->cpl) * ip->ftwidth)); 72*54073Shibler dp = fontbuf; 73*54073Shibler for (i = 0; i < glyphsize; i++) { 74*54073Shibler *dp++ = getbyte(ip, romp); 75*54073Shibler romp += 2; 76*54073Shibler } 77*54073Shibler writeglyph(ip, fbmem, fontbuf); 78*54073Shibler } 79*54073Shibler } 80*54073Shibler 81*54073Shibler /* 82*54073Shibler * Display independent versions of the readbyte and writeglyph routines. 83*54073Shibler */ 84*54073Shibler u_char 85*54073Shibler ite_readbyte(ip, disp) 86*54073Shibler struct ite_softc *ip; 87*54073Shibler int disp; 88*54073Shibler { 89*54073Shibler return((u_char) *(((u_char *)ip->regbase) + disp)); 90*54073Shibler } 91*54073Shibler 92*54073Shibler ite_writeglyph(ip, fbmem, glyphp) 93*54073Shibler register struct ite_softc *ip; 94*54073Shibler register u_char *fbmem, *glyphp; 95*54073Shibler { 9641488Smckusick register int bn; 9741488Smckusick int c, l, b; 9841488Smckusick 99*54073Shibler for (l = 0; l < ip->ftheight; l++) { 100*54073Shibler bn = 7; 101*54073Shibler for (b = 0; b < ip->ftwidth; b++) { 102*54073Shibler if ((1 << bn) & *glyphp) 103*54073Shibler *fbmem++ = 1; 104*54073Shibler else 105*54073Shibler *fbmem++ = 0; 106*54073Shibler if (--bn < 0) { 107*54073Shibler bn = 7; 108*54073Shibler glyphp++; 10941488Smckusick } 11041488Smckusick } 111*54073Shibler if (bn < 7) 112*54073Shibler glyphp++; 113*54073Shibler fbmem -= ip->ftwidth; 114*54073Shibler fbmem += ip->fbwidth; 11541488Smckusick } 11641488Smckusick } 11741488Smckusick #endif 118