- mc6845's cursor is disabled by punching bit 6 of cursor start register.
- Add new option (PCDISPLAY_SOFTCURSOR) that provides a large, non-blinking cursor in software.
This commit is contained in:
parent
072a96b17d
commit
f96e055d70
@ -1,4 +1,4 @@
|
|||||||
# $NetBSD: files,v 1.315 1999/09/12 01:17:32 chs Exp $
|
# $NetBSD: files,v 1.316 1999/09/19 21:48:09 ad Exp $
|
||||||
|
|
||||||
# @(#)files.newconf 7.5 (Berkeley) 5/10/93
|
# @(#)files.newconf 7.5 (Berkeley) 5/10/93
|
||||||
|
|
||||||
@ -381,6 +381,7 @@ define wsmousedev {[mux = -1]}
|
|||||||
# attribute to pull in raster support
|
# attribute to pull in raster support
|
||||||
define wsrasteremulops
|
define wsrasteremulops
|
||||||
# common PC display functions
|
# common PC display functions
|
||||||
|
defopt opt_pcdisplay.h PCDISPLAY_SOFTCURSOR
|
||||||
define pcdisplayops
|
define pcdisplayops
|
||||||
file dev/ic/pcdisplay_subr.c pcdisplayops
|
file dev/ic/pcdisplay_subr.c pcdisplayops
|
||||||
file dev/ic/pcdisplay_chars.c pcdisplayops
|
file dev/ic/pcdisplay_chars.c pcdisplayops
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: pcdisplay_subr.c,v 1.6 1998/07/24 16:12:18 drochner Exp $ */
|
/* $NetBSD: pcdisplay_subr.c,v 1.7 1999/09/19 21:48:08 ad Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1995, 1996 Carnegie-Mellon University.
|
* Copyright (c) 1995, 1996 Carnegie-Mellon University.
|
||||||
@ -45,27 +45,54 @@ pcdisplay_cursor(id, on, row, col)
|
|||||||
void *id;
|
void *id;
|
||||||
int on, row, col;
|
int on, row, col;
|
||||||
{
|
{
|
||||||
|
#ifdef PCDISPLAY_SOFTCURSOR
|
||||||
|
struct pcdisplayscreen *scr = id;
|
||||||
|
bus_space_tag_t memt = scr->hdl->ph_memt;
|
||||||
|
bus_space_handle_t memh = scr->hdl->ph_memh;
|
||||||
|
int off;
|
||||||
|
|
||||||
|
/* Remove old cursor image */
|
||||||
|
if (scr->cursoron) {
|
||||||
|
off = scr->vc_crow * scr->type->ncols + scr->vc_ccol;
|
||||||
|
if (scr->active)
|
||||||
|
bus_space_write_2(memt, memh, scr->dispoffset + off * 2,
|
||||||
|
scr->cursortmp);
|
||||||
|
else
|
||||||
|
scr->mem[off] = scr->cursortmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
scr->vc_crow = row;
|
||||||
|
scr->vc_ccol = col;
|
||||||
|
|
||||||
|
if ((scr->cursoron = on) == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
off = (scr->vc_crow * scr->type->ncols + scr->vc_ccol);
|
||||||
|
scr->cursortmp = bus_space_read_2(memt, memh, scr->dispoffset + off*2);
|
||||||
|
if (scr->active)
|
||||||
|
bus_space_write_2(memt, memh, scr->dispoffset + off * 2,
|
||||||
|
scr->cursortmp ^ 0x7000);
|
||||||
|
else
|
||||||
|
scr->mem[off] = scr->cursortmp ^ 0x7000;
|
||||||
|
#else /* PCDISPLAY_SOFTCURSOR */
|
||||||
struct pcdisplayscreen *scr = id;
|
struct pcdisplayscreen *scr = id;
|
||||||
int pos;
|
int pos;
|
||||||
|
|
||||||
#if 0
|
|
||||||
printf("pcdisplay_cursor: %d %d\n", row, col);
|
|
||||||
#endif
|
|
||||||
scr->vc_crow = row;
|
scr->vc_crow = row;
|
||||||
scr->vc_ccol = col;
|
scr->vc_ccol = col;
|
||||||
scr->cursoron = on;
|
scr->cursoron = on;
|
||||||
|
|
||||||
if (scr->active) {
|
if (scr->active) {
|
||||||
if (!on) {
|
if (!on)
|
||||||
/* XXX disable cursor how??? */
|
pos = 0x1010;
|
||||||
pos = -1;
|
else
|
||||||
} else
|
|
||||||
pos = scr->dispoffset / 2
|
pos = scr->dispoffset / 2
|
||||||
+ row * scr->type->ncols + col;
|
+ row * scr->type->ncols + col;
|
||||||
|
|
||||||
pcdisplay_6845_write(scr->hdl, cursorh, pos >> 8);
|
pcdisplay_6845_write(scr->hdl, cursorh, pos >> 8);
|
||||||
pcdisplay_6845_write(scr->hdl, cursorl, pos);
|
pcdisplay_6845_write(scr->hdl, cursorl, pos);
|
||||||
}
|
}
|
||||||
|
#endif /* PCDISPLAY_SOFTCURSOR */
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: pcdisplayvar.h,v 1.5 1999/02/12 11:25:24 drochner Exp $ */
|
/* $NetBSD: pcdisplayvar.h,v 1.6 1999/09/19 21:48:08 ad Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998
|
* Copyright (c) 1998
|
||||||
@ -32,6 +32,8 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "opt_pcdisplay.h"
|
||||||
|
|
||||||
struct pcdisplayscreen {
|
struct pcdisplayscreen {
|
||||||
struct pcdisplay_handle *hdl;
|
struct pcdisplay_handle *hdl;
|
||||||
|
|
||||||
@ -41,6 +43,9 @@ struct pcdisplayscreen {
|
|||||||
u_int16_t *mem; /* backing store for contents */
|
u_int16_t *mem; /* backing store for contents */
|
||||||
|
|
||||||
int cursoron; /* cursor displayed? */
|
int cursoron; /* cursor displayed? */
|
||||||
|
#ifdef PCDISPLAY_SOFTCURSOR
|
||||||
|
int cursortmp; /* glyph & attribute behind software cursor */
|
||||||
|
#endif
|
||||||
int vc_ccol, vc_crow; /* current cursor position */
|
int vc_ccol, vc_crow; /* current cursor position */
|
||||||
|
|
||||||
int dispoffset; /* offset of displayed area in video mem */
|
int dispoffset; /* offset of displayed area in video mem */
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: vga.c,v 1.17 1999/04/10 14:02:11 drochner Exp $ */
|
/* $NetBSD: vga.c,v 1.18 1999/09/19 21:48:08 ad Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1995, 1996 Carnegie-Mellon University.
|
* Copyright (c) 1995, 1996 Carnegie-Mellon University.
|
||||||
@ -408,6 +408,11 @@ vga_init_screen(vc, scr, type, existing, attrp)
|
|||||||
if (scr->pcs.dispoffset < scr->mindispoffset ||
|
if (scr->pcs.dispoffset < scr->mindispoffset ||
|
||||||
scr->pcs.dispoffset > scr->maxdispoffset)
|
scr->pcs.dispoffset > scr->maxdispoffset)
|
||||||
scr->pcs.dispoffset = scr->mindispoffset;
|
scr->pcs.dispoffset = scr->mindispoffset;
|
||||||
|
#ifdef PCDISPLAY_SOFTCURSOR
|
||||||
|
/* disable hardware cursor */
|
||||||
|
vga_6845_write(&vc->hdl, curstart, 0x10);
|
||||||
|
vga_6845_write(&vc->hdl, curend, 0x10);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
cpos = 0;
|
cpos = 0;
|
||||||
scr->pcs.dispoffset = scr->mindispoffset;
|
scr->pcs.dispoffset = scr->mindispoffset;
|
||||||
@ -866,6 +871,10 @@ vga_copyrows(id, srcrow, dstrow, nrows)
|
|||||||
|
|
||||||
if (scr->pcs.active) {
|
if (scr->pcs.active) {
|
||||||
if (dstrow == 0 && (srcrow + nrows == scr->pcs.type->nrows)) {
|
if (dstrow == 0 && (srcrow + nrows == scr->pcs.type->nrows)) {
|
||||||
|
#ifdef PCDISPLAY_SOFTCURSOR
|
||||||
|
pcdisplay_cursor(&scr->pcs, 0, scr->pcs.vc_crow,
|
||||||
|
scr->pcs.vc_ccol);
|
||||||
|
#endif
|
||||||
/* scroll up whole screen */
|
/* scroll up whole screen */
|
||||||
if ((scr->pcs.dispoffset + srcrow * ncols * 2)
|
if ((scr->pcs.dispoffset + srcrow * ncols * 2)
|
||||||
<= scr->maxdispoffset) {
|
<= scr->maxdispoffset) {
|
||||||
@ -881,6 +890,10 @@ vga_copyrows(id, srcrow, dstrow, nrows)
|
|||||||
scr->pcs.dispoffset >> 9);
|
scr->pcs.dispoffset >> 9);
|
||||||
vga_6845_write(&scr->cfg->hdl, startadrl,
|
vga_6845_write(&scr->cfg->hdl, startadrl,
|
||||||
scr->pcs.dispoffset >> 1);
|
scr->pcs.dispoffset >> 1);
|
||||||
|
#ifdef PCDISPLAY_SOFTCURSOR
|
||||||
|
pcdisplay_cursor(&scr->pcs, scr->pcs.cursoron,
|
||||||
|
scr->pcs.vc_crow, scr->pcs.vc_ccol);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
bus_space_copy_region_2(memt, memh,
|
bus_space_copy_region_2(memt, memh,
|
||||||
scr->pcs.dispoffset + srcoff * 2,
|
scr->pcs.dispoffset + srcoff * 2,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: vga_subr.c,v 1.4 1999/08/17 16:15:05 drochner Exp $ */
|
/* $NetBSD: vga_subr.c,v 1.5 1999/09/19 21:48:08 ad Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998
|
* Copyright (c) 1998
|
||||||
@ -141,10 +141,15 @@ vga_setscreentype(vh, type)
|
|||||||
/* lo byte */
|
/* lo byte */
|
||||||
vga_6845_write(vh, vde, type->fontheight * type->nrows - 1);
|
vga_6845_write(vh, vde, type->fontheight * type->nrows - 1);
|
||||||
|
|
||||||
|
#ifdef PCDISPLAY_SOFTCURSOR
|
||||||
|
/* disable hardware cursor */
|
||||||
|
vga_6845_write(vh, curstart, 0x10);
|
||||||
|
vga_6845_write(vh, curend, 0x10);
|
||||||
|
#else
|
||||||
/* set cursor to last 2 lines */
|
/* set cursor to last 2 lines */
|
||||||
vga_6845_write(vh, curstart, type->fontheight - 2);
|
vga_6845_write(vh, curstart, type->fontheight - 2);
|
||||||
vga_6845_write(vh, curend, type->fontheight - 1);
|
vga_6845_write(vh, curend, type->fontheight - 1);
|
||||||
|
#endif
|
||||||
/*
|
/*
|
||||||
* disable colour plane 3 if needed for font selection
|
* disable colour plane 3 if needed for font selection
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user