plan 9 kernel history: overview | file list | diff list

1992/0812/ss/screen.c (diff list | history)

1992/0812/sys/src/9/ss/screen.c:20,271992/0813/sys/src/9/ss/screen.c:20,39 (short | long | prev | next)
1990/1223    
	int	bwid; 
}out; 
 
void	(*kprofp)(ulong); 
1992/0813    
static ulong	rep(ulong, int); 
void		(*kprofp)(ulong); 
1990/1223    
 
1992/0813    
/* Brooktree 458/451 */ 
typedef struct	DAC DAC; 
struct DAC 
{ 
	uchar	pad[16]; 
	ulong	dacaddr;	/* DAC address register */ 
	ulong	daccolor;	/* DAC color palette */ 
	ulong	daccntrl;	/* DAC control register */ 
	ulong	dacovrl;	/* DAC overlay palette */ 
}*dac; 
 
1992/0810    
GBitmap gscreen; 
 
struct screens 
1992/0812/sys/src/9/ss/screen.c:30,391992/0813/sys/src/9/ss/screen.c:42,52
1992/0810    
	int	x; 
	int	y; 
	int	ld; 
1992/0813    
	ulong	dacaddr; 
1992/0810    
}screens[] = { 
1992/0812    
	{ "bwtwo", 1152, 900, 0 }, 
	{ "cgsix", 1152, 900, 3 }, 
	{ "cgthree", 1152, 900, 3 }, 
1992/0813    
	{ "bwtwo", 1152, 900, 0, 0x400000 }, 
	{ "cgsix", 1152, 900, 3, 0x400000 }, 
	{ "cgthree", 1152, 900, 3, 0x200000 }, 
1990/1223    
	0 
}; 
 
1992/0812/sys/src/9/ss/screen.c:43,491992/0813/sys/src/9/ss/screen.c:56,64
1992/0812    
screeninit(char *str) 
1990/1223    
{ 
1992/0810    
	struct screens *s; 
1992/0812    
	ulong n; 
1992/0813    
	ulong n, r, g, b; 
	int i; 
	int havecol; 
1992/0810    
 
	for(s=screens; s->type; s++) 
1992/0812    
		if(strcmp(s->type, str) == 0) 
1992/0812/sys/src/9/ss/screen.c:70,781992/0813/sys/src/9/ss/screen.c:85,144
1990/1223    
	out.pos.x = MINX; 
	out.pos.y = 0; 
	out.bwid = defont0.info[' '].width; 
1992/0813    
	dac = (DAC*)kmappa(FRAMEBUF+s->dacaddr, PTENOCACHE|PTEIO); 
	if(gscreen.ldepth == 3){ 
		havecol = 0;	 
		if(havecol) { 
			/* 
			 * For now, just use a fixed colormap, where pixel i is 
			 * regarded as 3 bits of red, 3 bits of green, and 2 bits of blue. 
			 * Intensities are inverted so that 0 means white, 255 means black. 
			 * Exception: pixels 85 and 170 are set to intermediate grey values 
			 * so that 2-bit grey scale images will look ok on this screen. 
			 */ 
			for(i = 0; i<256; i++) { 
				r = ~rep((i>>5) & 7, 3); 
				g = ~rep((i>>2) & 7, 3); 
				b = ~rep(i & 3, 2); 
				setcolor(i, r, g, b); 
			} 
			setcolor(85, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA); 
			setcolor(170, 0x55555555, 0x55555555, 0x55555555); 
		} else { 
dac->dacaddr = 4; 
dac->daccntrl = 0xFF; 
dac->dacaddr = 5; 
dac->daccntrl = 0x00; 
dac->dacaddr = 6; 
dac->daccntrl = 0x40; 
dac->dacaddr = 7; 
dac->daccntrl = 0x00; 
 
			dac->dacaddr = 0; 
			for(i=0; i<252; i+=4) { 
				dac->daccolor = ~rep(i,8); 
				dac->daccolor = ~rep(i,8); 
				dac->daccolor = ~rep(i,8); 
			} 
 
/* 
			for(i = 0; i<256; i++) 
				setcolor(i, ~rep(i,8), ~rep(i,8), ~rep(i,8)); 
*/ 
		} 
	} 
1990/1223    
} 
 
void 
1992/0813    
mapdump(void) 
{ 
	int i; 
	dac->dacaddr = 0; 
	for(i=0; i<100; i++) 
		print("%lux ", dac->daccolor); 
} 
 
void 
1991/1228    
screenputnl(void) 
{ 
1992/0807    
	if(!conf.monitor) 
1992/0812/sys/src/9/ss/screen.c:128,1381992/0813/sys/src/9/ss/screen.c:194,205
1990/1223    
 
1990/1231    
/* 
1991/0112    
 * Map is indexed by keyboard char, output is ASCII. 
 * Gnotisms: Return sends newline and Line Feed sends carriage return. 
1992/0813    
 * Plan 9-isms: 
 * Return sends newline and Line Feed sends carriage return. 
1991/0112    
 * Delete and Backspace both send backspace. 
 * Num Lock sends delete (rubout). 
 * Alt Graph is VIEW (scroll). 
 * Compose builds Latin-1 characters. 
1992/0813    
 * Compose builds Unicode characters. 
1990/1231    
 */ 
uchar keymap[128] = { 
/*	00    L1    02    L2    04    F1    F2    07	*/ 
1992/0812/sys/src/9/ss/screen.c:393,4081992/0813/sys/src/9/ss/screen.c:460,486
1991/0707    
void 
getcolor(ulong p, ulong *pr, ulong *pg, ulong *pb) 
{ 
1992/0813    
	uchar r, g, b; 
1991/0707    
	ulong ans; 
 
	/* 
	 * The slc monochrome says 0 is white (max intensity) 
	 */ 
	if(p == 0) 
		ans = ~0; 
	else 
		ans = 0; 
	*pr = *pg = *pb = ans; 
1992/0813    
	if(1 || gscreen.ldepth == 0) { 
		if(p == 0) 
			ans = ~0; 
		else 
			ans = 0; 
		*pr = *pg = *pb = ans; 
	} else { 
		*(uchar *)&dac->dacaddr = p & 0xFF; 
		r = *(uchar *)&dac->daccolor; 
		g = *(uchar *)&dac->daccolor; 
		b = *(uchar *)&dac->daccolor; 
		*pr = (r<<24) | (r<<16) | (r<<8) | r; 
		*pg = (g<<24) | (g<<16) | (g<<8) | g; 
		*pb = (b<<24) | (b<<16) | (b<<8) | b; 
	} 
1991/0707    
} 
 
 
1992/0812/sys/src/9/ss/screen.c:409,4161992/0813/sys/src/9/ss/screen.c:487,504
1991/0707    
int 
setcolor(ulong p, ulong r, ulong g, ulong b) 
{ 
1992/0711    
	USED(p, r, g, b); 
1991/0707    
	return 0;	/* can't change mono screen colormap */ 
1992/0813    
	if(1 || gscreen.ldepth == 0) 
		return 0;	/* can't change mono screen colormap */ 
	else { 
		/* perhaps not reliable unless done while vertical blanking ? */ 
		*(uchar *)&dac->dacaddr = p & 0xFF; 
/* 
		*(uchar *)&dac->daccolor = r >> 24; 
		*(uchar *)&dac->daccolor = g >> 24; 
		*(uchar *)&dac->daccolor = b >> 24; 
*/ 
		return 1; 
	} 
1991/0707    
} 
 
int 
1992/0812/sys/src/9/ss/screen.c:431,4341992/0813/sys/src/9/ss/screen.c:519,535
1991/0707    
mouseclock(void)	/* called splhi */ 
{ 
	mouseupdate(1); 
1992/0813    
} 
 
/* replicate (from top) value in v (n bits) until it fills a ulong */ 
static ulong 
rep(ulong v, int n) 
{ 
	int o; 
	ulong rv; 
 
	rv = 0; 
	for(o = 32 - n; o >= 0; o -= n) 
		rv |= (v << o); 
	return rv; 
1990/1223    
} 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)