|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1988 University of Utah. ! 3: * Copyright (c) 1990 The Regents of the University of California. ! 4: * All rights reserved. ! 5: * ! 6: * This code is derived from software contributed to Berkeley by ! 7: * the Systems Programming Group of the University of Utah Computer ! 8: * Science Department. ! 9: * ! 10: * Redistribution and use in source and binary forms, with or without ! 11: * modification, are permitted provided that the following conditions ! 12: * are met: ! 13: * 1. Redistributions of source code must retain the above copyright ! 14: * notice, this list of conditions and the following disclaimer. ! 15: * 2. Redistributions in binary form must reproduce the above copyright ! 16: * notice, this list of conditions and the following disclaimer in the ! 17: * documentation and/or other materials provided with the distribution. ! 18: * 3. All advertising materials mentioning features or use of this software ! 19: * must display the following acknowledgement: ! 20: * This product includes software developed by the University of ! 21: * California, Berkeley and its contributors. ! 22: * 4. Neither the name of the University nor the names of its contributors ! 23: * may be used to endorse or promote products derived from this software ! 24: * without specific prior written permission. ! 25: * ! 26: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ! 27: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! 28: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! 29: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE ! 30: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! 31: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! 32: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 33: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! 34: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! 35: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! 36: * SUCH DAMAGE. ! 37: * ! 38: * from: Utah $Hdr: ite_tc.c 1.9 89/02/20$ ! 39: * ! 40: * @(#)ite_tc.c 7.2 (Berkeley) 12/16/90 ! 41: */ ! 42: ! 43: #include "samachdep.h" ! 44: ! 45: #ifdef ITECONSOLE ! 46: ! 47: #include "sys/param.h" ! 48: #include "../dev/itevar.h" ! 49: #include "../dev/itereg.h" ! 50: #include "../dev/grfvar.h" ! 51: #include "../dev/grf_tcreg.h" ! 52: ! 53: #define REGBASE ((struct tcboxfb *)(ip->regbase)) ! 54: #define WINDOWMOVER topcat_windowmove ! 55: ! 56: topcat_init(ip) ! 57: register struct ite_softc *ip; ! 58: { ! 59: ! 60: /* ! 61: * Determine the number of planes by writing to the first frame ! 62: * buffer display location, then reading it back. ! 63: */ ! 64: REGBASE->wen = ~0; ! 65: REGBASE->fben = ~0; ! 66: REGBASE->prr = RR_COPY; ! 67: *FBBASE = 0xFF; ! 68: ip->planemask = *FBBASE; ! 69: ! 70: /* ! 71: * Enable reading/writing of all the planes. ! 72: */ ! 73: REGBASE->fben = ip->planemask; ! 74: REGBASE->wen = ip->planemask; ! 75: REGBASE->ren = ip->planemask; ! 76: REGBASE->prr = RR_COPY; ! 77: ! 78: ite_devinfo(ip); ! 79: ! 80: /* ! 81: * Clear the framebuffer on all planes. ! 82: */ ! 83: topcat_windowmove(ip, 0, 0, 0, 0, ip->fbheight, ip->fbwidth, RR_CLEAR); ! 84: tc_waitbusy(REGADDR, ip->planemask); ! 85: ! 86: ite_fontinit(ip); ! 87: ! 88: /* ! 89: * Stash the inverted cursor. ! 90: */ ! 91: topcat_windowmove(ip, charY(ip, ' '), charX(ip, ' '), ! 92: ip->cblanky, ip->cblankx, ip->ftheight, ! 93: ip->ftwidth, RR_COPYINVERTED); ! 94: } ! 95: ! 96: topcat_putc(ip, c, dy, dx, mode) ! 97: register struct ite_softc *ip; ! 98: register int dy, dx; ! 99: int c, mode; ! 100: { ! 101: topcat_windowmove(ip, charY(ip, c), charX(ip, c), ! 102: dy * ip->ftheight, dx * ip->ftwidth, ! 103: ip->ftheight, ip->ftwidth, RR_COPY); ! 104: } ! 105: ! 106: topcat_cursor(ip, flag) ! 107: register struct ite_softc *ip; ! 108: register int flag; ! 109: { ! 110: if (flag == DRAW_CURSOR) ! 111: draw_cursor(ip) ! 112: else if (flag == MOVE_CURSOR) { ! 113: erase_cursor(ip) ! 114: draw_cursor(ip) ! 115: } ! 116: else ! 117: erase_cursor(ip) ! 118: } ! 119: ! 120: topcat_clear(ip, sy, sx, h, w) ! 121: struct ite_softc *ip; ! 122: register int sy, sx, h, w; ! 123: { ! 124: topcat_windowmove(ip, sy * ip->ftheight, sx * ip->ftwidth, ! 125: sy * ip->ftheight, sx * ip->ftwidth, ! 126: h * ip->ftheight, w * ip->ftwidth, ! 127: RR_CLEAR); ! 128: } ! 129: ! 130: topcat_scroll(ip, sy, sx, count, dir) ! 131: register struct ite_softc *ip; ! 132: register int sy, count; ! 133: int dir, sx; ! 134: { ! 135: register int dy = sy - count; ! 136: register int height = ip->rows - sy; ! 137: ! 138: topcat_cursor(ip, ERASE_CURSOR); ! 139: ! 140: topcat_windowmove(ip, sy * ip->ftheight, sx * ip->ftwidth, ! 141: dy * ip->ftheight, sx * ip->ftwidth, ! 142: height * ip->ftheight, ! 143: ip->cols * ip->ftwidth, RR_COPY); ! 144: } ! 145: ! 146: topcat_windowmove(ip, sy, sx, dy, dx, h, w, func) ! 147: struct ite_softc *ip; ! 148: int sy, sx, dy, dx, h, w, func; ! 149: { ! 150: register struct tcboxfb *rp = REGBASE; ! 151: ! 152: if (h == 0 || w == 0) ! 153: return; ! 154: tc_waitbusy(REGADDR, ip->planemask); ! 155: rp->wmrr = func; ! 156: rp->source_y = sy; ! 157: rp->source_x = sx; ! 158: rp->dest_y = dy; ! 159: rp->dest_x = dx; ! 160: rp->wheight = h; ! 161: rp->wwidth = w; ! 162: rp->wmove = ip->planemask; ! 163: } ! 164: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.