141480Smckusick /* 241480Smckusick * Copyright (c) 1988 University of Utah. 341480Smckusick * Copyright (c) 1990 The Regents of the University of California. 441480Smckusick * All rights reserved. 541480Smckusick * 641480Smckusick * This code is derived from software contributed to Berkeley by 741480Smckusick * the Systems Programming Group of the University of Utah Computer 841480Smckusick * Science Department. 941480Smckusick * 1041480Smckusick * %sccs.include.redist.c% 1141480Smckusick * 1245507Smckusick * from: Utah $Hdr: ite_subr.c 1.1 90/07/09$ 1341480Smckusick * 14*49132Skarels * @(#)ite_subr.c 7.4 (Berkeley) 05/04/91 1541480Smckusick */ 1641480Smckusick 1741480Smckusick #include "ite.h" 1841480Smckusick #if NITE > 0 1941480Smckusick 20*49132Skarels #include "param.h" 21*49132Skarels #include "conf.h" 22*49132Skarels #include "proc.h" 23*49132Skarels #include "ioctl.h" 24*49132Skarels #include "tty.h" 25*49132Skarels #include "systm.h" 2641480Smckusick 2741480Smckusick #include "itevar.h" 2841480Smckusick #include "itereg.h" 2941480Smckusick 30*49132Skarels #include "machine/cpu.h" 3141480Smckusick 3241480Smckusick ite_devinfo(ip) 3341480Smckusick struct ite_softc *ip; 3441480Smckusick { 3541480Smckusick struct fontinfo *fi; 3641480Smckusick struct font *fd; 3741480Smckusick 3841480Smckusick fi = (struct fontinfo *) ((*FONTROM << 8 | *(FONTROM + 2)) + REGADDR); 3941480Smckusick fd = (struct font *) ((fi->haddr << 8 | fi->laddr) + REGADDR); 4041480Smckusick 4141480Smckusick ip->ftheight = fd->fh; 4241480Smckusick ip->ftwidth = fd->fw; 4341480Smckusick ip->fbwidth = ITEREGS->fbwidth_h << 8 | ITEREGS->fbwidth_l; 4441480Smckusick ip->fbheight = ITEREGS->fbheight_h << 8 | ITEREGS->fbheight_l; 4541480Smckusick ip->dwidth = ITEREGS->dispwidth_h << 8 | ITEREGS->dispwidth_l; 4641480Smckusick ip->dheight = ITEREGS->dispheight_h << 8 | ITEREGS->dispheight_l; 4741480Smckusick ip->rows = ip->dheight / ip->ftheight; 4841480Smckusick ip->cols = ip->dwidth / ip->ftwidth; 4941480Smckusick 5041480Smckusick if (ip->fbwidth > ip->dwidth) { 5141480Smckusick /* 5241480Smckusick * Stuff goes to right of display. 5341480Smckusick */ 5441480Smckusick ip->fontx = ip->dwidth; 5541480Smckusick ip->fonty = 0; 5641480Smckusick ip->cpl = (ip->fbwidth - ip->dwidth) / ip->ftwidth; 5741480Smckusick ip->cblankx = ip->dwidth; 5841480Smckusick ip->cblanky = ip->fonty + ((128 / ip->cpl) +1) * ip->ftheight; 5941480Smckusick } 6041480Smckusick else { 6141480Smckusick /* 6241480Smckusick * Stuff goes below the display. 6341480Smckusick */ 6441480Smckusick ip->fontx = 0; 6541480Smckusick ip->fonty = ip->dheight; 6641480Smckusick ip->cpl = ip->fbwidth / ip->ftwidth; 6741480Smckusick ip->cblankx = 0; 6841480Smckusick ip->cblanky = ip->fonty + ((128 / ip->cpl) + 1) * ip->ftheight; 6941480Smckusick } 7041480Smckusick } 7141480Smckusick 7241480Smckusick ite_fontinit(ip) 7341480Smckusick register struct ite_softc *ip; 7441480Smckusick { 7541480Smckusick struct fontinfo *fi; 7641480Smckusick struct font *fd; 7741480Smckusick register u_char *fbmem, *dp; 7841480Smckusick register int bn; 7941480Smckusick int c, l, b; 8041480Smckusick 8141480Smckusick fi = (struct fontinfo *) ((*FONTROM << 8 | *(FONTROM + 2)) + REGADDR); 8241480Smckusick fd = (struct font *) ((fi->haddr << 8 | fi->laddr) + REGADDR); 8341480Smckusick 8441480Smckusick dp = fd->data; 8541480Smckusick 8641480Smckusick for (c = 0; c < 128; c++) { 8741480Smckusick fbmem = (u_char *) FBBASE + 8841480Smckusick (ip->fonty + (c / ip->cpl) * ip->ftheight) * 8941480Smckusick ip->fbwidth; 9041480Smckusick fbmem += ip->fontx + (c % ip->cpl) * ip->ftwidth; 9141480Smckusick for (l = 0; l < ip->ftheight; l++) { 9241480Smckusick bn = 7; 9341480Smckusick for (b = 0; b < ip->ftwidth; b++) { 9441480Smckusick if ((1 << bn) & *dp) 9541480Smckusick *fbmem++ = 1; 9641480Smckusick else 9741480Smckusick *fbmem++ = 0; 9841480Smckusick if (--bn < 0) { 9941480Smckusick bn = 7; 10041480Smckusick dp += 2; 10141480Smckusick } 10241480Smckusick } 10341480Smckusick if (bn < 7) 10441480Smckusick dp += 2; 10541480Smckusick fbmem -= ip->ftwidth; 10641480Smckusick fbmem += ip->fbwidth; 10741480Smckusick } 10841480Smckusick } 10941480Smckusick 11041480Smckusick } 11141480Smckusick #endif 112