* Copyright (c) 1988 University of Utah.
* Copyright (c) 1990 The Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* the Systems Programming Group of the University of Utah Computer
* %sccs.include.redist.c%
* from: Utah $Hdr: ite_gb.c 1.18 91/01/21$
* @(#)ite_gb.c 7.5 (Berkeley) %G%
#define REGBASE ((struct gboxfb *)(ip->regbase))
#define WINDOWMOVER gatorbox_windowmove
register struct ite_softc
*ip
;
struct grf_softc
*gp
= &grf_softc
[ip
- ite_softc
];
ip
->regbase
= gp
->g_regkva
;
ip
->fbbase
= gp
->g_fbkva
;
REGBASE
->write_protect
= 0x0;
REGBASE
->interrupt
= 0x4;
REGBASE
->rep_rule
= RR_COPY
;
REGBASE
->sec_interrupt
= 0x01;
* Set up the color map entries. We use three entries in the
* color map. The first, is for black, the second is for
* white, and the very last entry is for the inverted cursor.
REGBASE
->creg_select
= 0x00;
REGBASE
->cmap_red
= 0x00;
REGBASE
->cmap_grn
= 0x00;
REGBASE
->cmap_blu
= 0x00;
REGBASE
->cmap_write
= 0x00;
REGBASE
->creg_select
= 0x01;
REGBASE
->cmap_red
= 0xFF;
REGBASE
->cmap_grn
= 0xFF;
REGBASE
->cmap_blu
= 0xFF;
REGBASE
->cmap_write
= 0x01;
REGBASE
->creg_select
= 0xFF;
REGBASE
->cmap_red
= 0xFF;
REGBASE
->cmap_grn
= 0xFF;
REGBASE
->cmap_blu
= 0xFF;
REGBASE
->cmap_write
= 0x01;
* Clear the display. This used to be before the font unpacking
* but it crashes. Figure it out later.
gatorbox_windowmove(ip
, 0, 0, 0, 0, ip
->dheight
, ip
->dwidth
, RR_CLEAR
);
tile_mover_waitbusy(REGADDR
);
* Stash the inverted cursor.
gatorbox_windowmove(ip
, charY(ip
, ' '), charX(ip
, ' '),
ip
->cblanky
, ip
->cblankx
, ip
->ftheight
,
ip
->ftwidth
, RR_COPYINVERTED
);
gatorbox_windowmove(ip
, 0, 0, 0, 0,
ip
->dheight
, ip
->dwidth
, RR_CLEAR
);
tile_mover_waitbusy(REGADDR
);
ip
->flags
&= ~ITE_INITED
;
gatorbox_putc(ip
, c
, dy
, dx
, mode
)
register struct ite_softc
*ip
;
register int wrr
= ((mode
== ATTR_INV
) ? RR_COPYINVERTED
: RR_COPY
);
gatorbox_windowmove(ip
, charY(ip
, c
), charX(ip
, c
),
dy
* ip
->ftheight
, dx
* ip
->ftwidth
,
ip
->ftheight
, ip
->ftwidth
, wrr
);
gatorbox_cursor(ip
, flag
)
register struct ite_softc
*ip
;
else if (flag
== MOVE_CURSOR
) {
gatorbox_clear(ip
, sy
, sx
, h
, w
)
register int sy
, sx
, h
, w
;
gatorbox_windowmove(ip
, sy
* ip
->ftheight
, sx
* ip
->ftwidth
,
sy
* ip
->ftheight
, sx
* ip
->ftwidth
,
h
* ip
->ftheight
, w
* ip
->ftwidth
,
#define gatorbox_blockmove(ip, sy, sx, dy, dx, h, w) \
gatorbox_windowmove((ip), \
gatorbox_scroll(ip
, sy
, sx
, count
, dir
)
register struct ite_softc
*ip
;
register int height
, dy
, i
;
tile_mover_waitbusy(REGADDR
);
REGBASE
->write_protect
= 0x0;
gatorbox_cursor(ip
, ERASE_CURSOR
);
for (i
= 0; i
< height
; i
++)
gatorbox_blockmove(ip
, sy
+ i
, sx
, dy
+ i
, 0,
else if (dir
== SCROLL_DOWN
) {
for (i
= (height
- 1); i
>= 0; i
--)
gatorbox_blockmove(ip
, sy
+ i
, sx
, dy
+ i
, 0,
else if (dir
== SCROLL_RIGHT
) {
gatorbox_blockmove(ip
, sy
, sx
, sy
, sx
+ count
,
1, ip
->cols
- (sx
+ count
));
gatorbox_blockmove(ip
, sy
, sx
, sy
, sx
- count
,
gatorbox_windowmove(ip
, sy
, sx
, dy
, dx
, h
, w
, mask
)
register struct ite_softc
*ip
;
int sy
, sx
, dy
, dx
, mask
;
src
= (sy
* 1024) + sx
; /* upper left corner in pixels */
tile_mover_waitbusy(REGADDR
);
REGBASE
->width
= -(w
/ 4);
REGBASE
->height
= -(h
/ 4);
REGBASE
->rep_rule
= MOVE_DOWN_RIGHT
|mask
;
REGBASE
->rep_rule
= MOVE_UP_LEFT
|mask
;
* Adjust to top of lower right tile of the block.
src
= src
+ ((h
- 4) * 1024) + (w
- 4);
dest
= dest
+ ((h
- 4) * 1024) + (w
- 4);
FBBASE
[dest
] = FBBASE
[src
];