xref: /original-bsd/sys/hp/dev/itevar.h (revision 37b2dff4)
16df4657fSmckusick /*
26df4657fSmckusick  * Copyright (c) 1988 University of Utah.
3*37b2dff4Sbostic  * Copyright (c) 1990, 1993
4*37b2dff4Sbostic  *	The Regents of the University of California.  All rights reserved.
56df4657fSmckusick  *
66df4657fSmckusick  * This code is derived from software contributed to Berkeley by
76df4657fSmckusick  * the Systems Programming Group of the University of Utah Computer
86df4657fSmckusick  * Science Department.
96df4657fSmckusick  *
106df4657fSmckusick  * %sccs.include.redist.c%
116df4657fSmckusick  *
12c980d09dShibler  * from: Utah $Hdr: itevar.h 1.15 92/12/20$
136df4657fSmckusick  *
14*37b2dff4Sbostic  *	@(#)itevar.h	8.1 (Berkeley) 06/10/93
156df4657fSmckusick  */
166df4657fSmckusick 
176df4657fSmckusick #define UNIT(dev)       minor(dev)
186df4657fSmckusick 
196df4657fSmckusick struct itesw {
2066fe6478Shibler 	int	ite_hwid;		/* Hardware id */
216df4657fSmckusick 	int	(*ite_init)();
226df4657fSmckusick 	int	(*ite_deinit)();
236df4657fSmckusick 	int	(*ite_clear)();
246df4657fSmckusick 	int	(*ite_putc)();
256df4657fSmckusick 	int	(*ite_cursor)();
266df4657fSmckusick 	int	(*ite_scroll)();
2766fe6478Shibler 	u_char	(*ite_readbyte)();
2866fe6478Shibler 	int	(*ite_writeglyph)();
296df4657fSmckusick };
306df4657fSmckusick 
3166fe6478Shibler #define getbyte(ip, offset) \
3266fe6478Shibler 	((*(ip)->isw->ite_readbyte)(ip, offset))
3366fe6478Shibler 
3466fe6478Shibler #define getword(ip, offset) \
3566fe6478Shibler 	((getbyte(ip, offset) << 8) | getbyte(ip, (offset) + 2))
3666fe6478Shibler 
3766fe6478Shibler #define writeglyph(ip, offset, fontbuf) \
3866fe6478Shibler 	((*(ip)->isw->ite_writeglyph)((ip), (offset), (fontbuf)))
3966fe6478Shibler 
406df4657fSmckusick struct ite_softc {
416df4657fSmckusick 	int	flags;
4266fe6478Shibler 	struct  itesw *isw;
4366fe6478Shibler 	struct  grf_softc *grf;
446df4657fSmckusick 	caddr_t regbase, fbbase;
456df4657fSmckusick 	short	curx, cury;
466df4657fSmckusick 	short   cursorx, cursory;
476df4657fSmckusick 	short   cblankx, cblanky;
486df4657fSmckusick 	short	rows, cols;
496df4657fSmckusick 	short   cpl;
506df4657fSmckusick 	short	dheight, dwidth;
516df4657fSmckusick 	short	fbheight, fbwidth;
526df4657fSmckusick 	short	ftheight, ftwidth;
536df4657fSmckusick 	short	fontx, fonty;
546df4657fSmckusick 	short   attribute;
556df4657fSmckusick 	u_char	*attrbuf;
566df4657fSmckusick 	short	planemask;
576df4657fSmckusick 	short	pos;
586df4657fSmckusick 	char	imode, escape, fpd, hold;
5966fe6478Shibler 	caddr_t	devdata;			/* display dependent data */
606df4657fSmckusick };
616df4657fSmckusick 
626df4657fSmckusick /* Flags */
636df4657fSmckusick #define ITE_ALIVE	0x01	/* hardware exists */
646df4657fSmckusick #define ITE_INITED	0x02	/* device has been initialized */
656df4657fSmckusick #define ITE_CONSOLE	0x04	/* device can be console */
666df4657fSmckusick #define ITE_ISCONS	0x08	/* device is console */
676df4657fSmckusick #define ITE_ACTIVE	0x10	/* device is being used as ITE */
686df4657fSmckusick #define ITE_INGRF	0x20	/* device in use as non-ITE */
69c980d09dShibler #define ITE_CURSORON	0x40	/* cursor being tracked */
706df4657fSmckusick 
716df4657fSmckusick #define attrloc(ip, y, x) \
726df4657fSmckusick 	(ip->attrbuf + ((y) * ip->cols) + (x))
736df4657fSmckusick 
746df4657fSmckusick #define attrclr(ip, sy, sx, h, w) \
756df4657fSmckusick 	bzero(ip->attrbuf + ((sy) * ip->cols) + (sx), (h) * (w))
766df4657fSmckusick 
776df4657fSmckusick #define attrmov(ip, sy, sx, dy, dx, h, w) \
786df4657fSmckusick 	bcopy(ip->attrbuf + ((sy) * ip->cols) + (sx), \
796df4657fSmckusick 	      ip->attrbuf + ((dy) * ip->cols) + (dx), \
806df4657fSmckusick 	      (h) * (w))
816df4657fSmckusick 
826df4657fSmckusick #define attrtest(ip, attr) \
836df4657fSmckusick 	((* (u_char *) attrloc(ip, ip->cury, ip->curx)) & attr)
846df4657fSmckusick 
856df4657fSmckusick #define attrset(ip, attr) \
866df4657fSmckusick 	((* (u_char *) attrloc(ip, ip->cury, ip->curx)) = attr)
876df4657fSmckusick 
886df4657fSmckusick /*
896df4657fSmckusick  * X and Y location of character 'c' in the framebuffer, in pixels.
906df4657fSmckusick  */
916df4657fSmckusick #define	charX(ip,c)	\
926df4657fSmckusick 	(((c) % (ip)->cpl) * (ip)->ftwidth + (ip)->fontx)
936df4657fSmckusick 
946df4657fSmckusick #define	charY(ip,c)	\
956df4657fSmckusick 	(((c) / (ip)->cpl) * (ip)->ftheight + (ip)->fonty)
966df4657fSmckusick 
9766fe6478Shibler /*
9866fe6478Shibler  * The cursor is just an inverted space.
9966fe6478Shibler  */
10066fe6478Shibler #define draw_cursor(ip) { \
10166fe6478Shibler 	WINDOWMOVER(ip, ip->cblanky, ip->cblankx, \
10266fe6478Shibler 		    ip->cury * ip->ftheight, \
10366fe6478Shibler 		    ip->curx * ip->ftwidth, \
10466fe6478Shibler 		    ip->ftheight, ip->ftwidth, RR_XOR); \
10566fe6478Shibler         ip->cursorx = ip->curx; \
10666fe6478Shibler 	ip->cursory = ip->cury; }
10766fe6478Shibler 
10866fe6478Shibler #define erase_cursor(ip) \
10966fe6478Shibler   	WINDOWMOVER(ip, ip->cblanky, ip->cblankx, \
11066fe6478Shibler 		    ip->cursory * ip->ftheight, \
11166fe6478Shibler 		    ip->cursorx * ip->ftwidth, \
11266fe6478Shibler 		    ip->ftheight, ip->ftwidth, RR_XOR);
11366fe6478Shibler 
1146df4657fSmckusick /* Character attributes */
1156df4657fSmckusick #define ATTR_NOR        0x0             /* normal */
1166df4657fSmckusick #define	ATTR_INV	0x1		/* inverse */
1176df4657fSmckusick #define	ATTR_UL		0x2		/* underline */
1186df4657fSmckusick #define ATTR_ALL	(ATTR_INV | ATTR_UL)
1196df4657fSmckusick 
1206df4657fSmckusick /* Keyboard attributes */
1216df4657fSmckusick #define ATTR_KPAD	0x4		/* keypad transmit */
1226df4657fSmckusick 
1236df4657fSmckusick /* Replacement Rules */
1246df4657fSmckusick #define RR_CLEAR		0x0
1256df4657fSmckusick #define RR_COPY			0x3
1266df4657fSmckusick #define RR_XOR			0x6
1276df4657fSmckusick #define RR_COPYINVERTED  	0xc
1286df4657fSmckusick 
1296df4657fSmckusick #define SCROLL_UP	0x01
1306df4657fSmckusick #define SCROLL_DOWN	0x02
1316df4657fSmckusick #define SCROLL_LEFT	0x03
1326df4657fSmckusick #define SCROLL_RIGHT	0x04
1336df4657fSmckusick #define DRAW_CURSOR	0x05
1346df4657fSmckusick #define ERASE_CURSOR    0x06
1356df4657fSmckusick #define MOVE_CURSOR	0x07
1366df4657fSmckusick 
1376df4657fSmckusick #define KBD_SSHIFT	4		/* bits to shift status */
1386df4657fSmckusick #define	KBD_CHARMASK	0x7F
1396df4657fSmckusick 
1406df4657fSmckusick /* keyboard status */
1416df4657fSmckusick #define	KBD_SMASK	0xF		/* service request status mask */
1426df4657fSmckusick #define	KBD_CTRLSHIFT	0x8		/* key + CTRL + SHIFT */
1436df4657fSmckusick #define	KBD_CTRL	0x9		/* key + CTRL */
1446df4657fSmckusick #define	KBD_SHIFT	0xA		/* key + SHIFT */
1456df4657fSmckusick #define	KBD_KEY		0xB		/* key only */
1466df4657fSmckusick 
1476df4657fSmckusick #define KBD_CAPSLOCK    0x18
1486df4657fSmckusick 
1496df4657fSmckusick #define KBD_EXT_LEFT_DOWN     0x12
1506df4657fSmckusick #define KBD_EXT_LEFT_UP       0x92
1516df4657fSmckusick #define KBD_EXT_RIGHT_DOWN    0x13
1526df4657fSmckusick #define KBD_EXT_RIGHT_UP      0x93
1536df4657fSmckusick 
1546df4657fSmckusick #define	TABSIZE		8
1556df4657fSmckusick #define	TABEND(u)	(ite_tty[u].t_winsize.ws_col - TABSIZE)
1566df4657fSmckusick 
1576df4657fSmckusick #ifdef KERNEL
1586df4657fSmckusick extern	struct ite_softc ite_softc[];
15966fe6478Shibler extern	struct itesw itesw[];
16066fe6478Shibler extern	int nitesw;
1616df4657fSmckusick #endif
162