home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / hp300 / stand / ite_rb.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-05  |  5.3 KB  |  195 lines

  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_rb.c 1.5 89/02/20$
  39.  *
  40.  *    @(#)ite_rb.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_rbreg.h"
  52.  
  53. #define REGBASE        ((struct rboxfb *)(ip->regbase))
  54. #define WINDOWMOVER    rbox_windowmove
  55.  
  56. rbox_init(ip)
  57.     struct ite_softc *ip;
  58. {
  59.     int i;
  60.     
  61.     rb_waitbusy(REGADDR);
  62.     DELAY(3000);
  63.  
  64.     REGBASE->interrupt = 0x04;
  65.     REGBASE->display_enable = 0x01;
  66.     REGBASE->video_enable = 0x01;
  67.     REGBASE->drive = 0x01;
  68.     REGBASE->vdrive = 0x0;
  69.  
  70.     ite_devinfo(ip);
  71.     
  72.     REGBASE->opwen = 0xFF;
  73.  
  74.     /*
  75.      * Clear the framebuffer.
  76.      */
  77.     rbox_windowmove(ip, 0, 0, 0, 0, ip->fbheight, ip->fbwidth, RR_CLEAR);
  78.     rb_waitbusy(REGADDR);
  79.     
  80.     for(i = 0; i < 16; i++) {
  81.         *(REGADDR + 0x63c3 + i*4) = 0x0;
  82.         *(REGADDR + 0x6403 + i*4) = 0x0;
  83.         *(REGADDR + 0x6803 + i*4) = 0x0;
  84.         *(REGADDR + 0x6c03 + i*4) = 0x0;
  85.         *(REGADDR + 0x73c3 + i*4) = 0x0;
  86.         *(REGADDR + 0x7403 + i*4) = 0x0;
  87.         *(REGADDR + 0x7803 + i*4) = 0x0;
  88.         *(REGADDR + 0x7c03 + i*4) = 0x0;
  89.     }
  90.  
  91.     REGBASE->rep_rule = 0x33;
  92.     
  93.     /*
  94.      * I cannot figure out how to make the blink planes stop. So, we
  95.      * must set both colormaps so that when the planes blink, and
  96.      * the secondary colormap is active, we still get text.
  97.      */
  98.     CM1RED[0x00].value = 0x00;
  99.     CM1GRN[0x00].value = 0x00;
  100.     CM1BLU[0x00].value = 0x00;
  101.     CM1RED[0x01].value = 0xFF;
  102.     CM1GRN[0x01].value = 0xFF;
  103.     CM1BLU[0x01].value = 0xFF;
  104.  
  105.     CM2RED[0x00].value = 0x00;
  106.     CM2GRN[0x00].value = 0x00;
  107.     CM2BLU[0x00].value = 0x00;
  108.     CM2RED[0x01].value = 0xFF;
  109.     CM2GRN[0x01].value = 0xFF;
  110.     CM2BLU[0x01].value = 0xFF;
  111.  
  112.      REGBASE->blink = 0x00;
  113.     REGBASE->write_enable = 0x01;
  114.     REGBASE->opwen = 0x00;
  115.     
  116.     ite_fontinit(ip);
  117.  
  118.     /*
  119.      * Stash the inverted cursor.
  120.      */
  121.     rbox_windowmove(ip, charY(ip, ' '), charX(ip, ' '),
  122.                 ip->cblanky, ip->cblankx, ip->ftheight,
  123.                 ip->ftwidth, RR_COPYINVERTED);
  124. }
  125.  
  126. rbox_putc(ip, c, dy, dx, mode)
  127.     register struct ite_softc *ip;
  128.         register int dy, dx;
  129.     int c, mode;
  130. {
  131.     rbox_windowmove(ip, charY(ip, c), charX(ip, c),
  132.             dy * ip->ftheight, dx * ip->ftwidth,
  133.             ip->ftheight, ip->ftwidth, RR_COPY);
  134. }
  135.  
  136. rbox_cursor(ip, flag)
  137.     register struct ite_softc *ip;
  138.         register int flag;
  139. {
  140.     if (flag == DRAW_CURSOR)
  141.         draw_cursor(ip)
  142.     else if (flag == MOVE_CURSOR) {
  143.         erase_cursor(ip)
  144.         draw_cursor(ip)
  145.     }
  146.     else
  147.         erase_cursor(ip)
  148. }
  149.  
  150. rbox_clear(ip, sy, sx, h, w)
  151.     struct ite_softc *ip;
  152.     register int sy, sx, h, w;
  153. {
  154.     rbox_windowmove(ip, sy * ip->ftheight, sx * ip->ftwidth,
  155.             sy * ip->ftheight, sx * ip->ftwidth, 
  156.             h  * ip->ftheight, w  * ip->ftwidth,
  157.             RR_CLEAR);
  158. }
  159.  
  160. rbox_scroll(ip, sy, sx, count, dir)
  161.         register struct ite_softc *ip;
  162.         register int sy, count;
  163.         int dir, sx;
  164. {
  165.     register int dy = sy - count;
  166.     register int height = ip->rows - sy;
  167.  
  168.     rbox_cursor(ip, ERASE_CURSOR);
  169.  
  170.     rbox_windowmove(ip, sy * ip->ftheight, sx * ip->ftwidth,
  171.             dy * ip->ftheight, sx * ip->ftwidth,
  172.             height * ip->ftheight,
  173.             ip->cols * ip->ftwidth, RR_COPY);
  174. }
  175.  
  176. rbox_windowmove(ip, sy, sx, dy, dx, h, w, func)
  177.     struct ite_softc *ip;
  178.     int sy, sx, dy, dx, h, w, func;
  179. {
  180.     register struct rboxfb *rp = REGBASE;
  181.     if (h == 0 || w == 0)
  182.         return;
  183.     
  184.     rb_waitbusy(REGADDR);
  185.     rp->rep_rule = func << 4 | func;
  186.     rp->source_y = sy;
  187.     rp->source_x = sx;
  188.     rp->dest_y = dy;
  189.     rp->dest_x = dx;
  190.     rp->wheight = h;
  191.     rp->wwidth  = w;
  192.     rp->wmove = 1;
  193. }
  194. #endif
  195.