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

1992/1108/pc/vga.c (diff list | history)

1992/1107/sys/src/9/pc/vga.c:327,3331992/1108/sys/src/9/pc/vga.c:327,386 (short | long | prev | next)
1992/1106    
		mbb.max.y = p.y+1; 
} 
 
1992/1108    
/* 
 *  copy litte endian soft screen to big endian hard screen 
 */ 
1992/1106    
void 
1992/1108    
screenupdate(void) 
{ 
	uchar *sp, *hp; 
	int y, len, incs, inch; 
	Rectangle r; 
 
	r = mbb; 
	mbb = NULLMBB; 
 
	if(Dy(r) < 0) 
		return; 
 
	if(r.min.x < 0) 
		r.min.x = 0; 
	if(r.min.y < 0) 
		r.min.y = 0; 
	if(r.max.x > gscreen.r.max.x) 
		r.max.x = gscreen.r.max.x; 
	if(r.max.y > gscreen.r.max.y) 
		r.max.y = gscreen.r.max.y; 
 
	sp = (uchar*)gaddr(&gscreen, r.min); 
	hp = (uchar*)gaddr(&vgascreen, r.min); 
	len = (r.max.x + 31)/32 - r.min.x/32; 
	len *= BY2WD; 
	if(len <= 0) 
		return; 
 
	incs = gscreen.width * BY2WD; 
	inch = vgascreen.width * BY2WD; 
 
	switch(gscreen.ldepth){ 
	case 0: 
		for (y = r.min.y; y < r.max.y; y++){ 
			l0update(sp, hp, len); 
			sp += incs; 
			hp += inch; 
		} 
		break; 
	case 1: 
		for (y = r.min.y; y < r.max.y; y++){ 
			l1update(sp, hp, len); 
			sp += incs; 
			hp += inch; 
		} 
		break; 
	} 
} 
 
void 
1991/1228    
screenputnl(void) 
1991/0730    
{ 
1992/1106    
	Rectangle r; 
1992/1107/sys/src/9/pc/vga.c:394,4431992/1108/sys/src/9/pc/vga.c:447,453
1991/0730    
} 
 
1992/1106    
 
/* 
 *  copy litte endian soft screen to big endian hard screen 
 */ 
1991/0730    
void 
1992/1106    
screenupdate(void) 
{ 
	uchar *sp, *hp, *se; 
	int y, len, inc; 
1992/1107    
	Rectangle r; 
1992/1106    
                 
1992/1107    
	r = mbb; 
	mbb = NULLMBB; 
                 
1992/1106    
	if(Dy(r) < 0) 
		return; 
                 
1992/1107    
	if(r.min.x < 0) 
		r.min.x = 0; 
	if(r.min.y < 0) 
		r.min.y = 0; 
	if(r.max.x > gscreen.r.max.x) 
		r.max.x = gscreen.r.max.x; 
	if(r.max.y > gscreen.r.max.y) 
		r.max.y = gscreen.r.max.y; 
                 
1992/1106    
	sp = (uchar*)gaddr(&gscreen, r.min); 
	hp = (uchar*)gaddr(&vgascreen, r.min); 
                 
	len = (r.max.x * (1<<gscreen.ldepth) + 31)/32 
		- (r.min.x * (1<<gscreen.ldepth))/32; 
	len *= BY2WD; 
1992/1107    
	if(len <= 0) 
		return; 
1992/1106    
                 
	inc = gscreen.width * BY2WD - len; 
                 
	for (y = r.min.y; y < r.max.y; y++){ 
1992/1107    
		l0update(sp, hp, len); 
		sp += inc+len; 
		hp += inc+len; 
1992/1106    
	} 
} 
                 
void 
mousescreenupdate(void) 
{ 
	screenupdate(); 
1992/1107/sys/src/9/pc/vga.c:512,5141992/1108/sys/src/9/pc/vga.c:522,574
1992/1106    
	bitreverse(arrow.set, 2*16); 
	bitreverse(arrow.clr, 2*16); 
1991/0730    
} 
1992/1108    
 
/* 
 *  Table for separating and reversing bits in a ldepth 1 bitmap. 
 *  This aids in coverting a little endian ldepth 1 bitmap into the 
 *  2 big-endian ldepth 0 bitmaps used for the VGA bit planes. 
 * 
 *	if the bits in uchar x are labeled 
 *		76543210 
 *	then l1revsep[x] yields a ushort with bits 
 *		____0246____1357 
 *	where _ represents a bit whose value is 0. 
 * 
 *  This table is used by l1update() in l.s.  l1update is implemented 
 *  in assembler for speed (yech). 
 * 
 */ 
ushort l1revsep[] = { 
	0x0000,	0x0800,	0x0008,	0x0808,	0x0400,	0x0c00,	0x0408,	0x0c08, 
	0x0004,	0x0804,	0x000c,	0x080c,	0x0404,	0x0c04,	0x040c,	0x0c0c, 
	0x0200,	0x0a00,	0x0208,	0x0a08,	0x0600,	0x0e00,	0x0608,	0x0e08, 
	0x0204,	0x0a04,	0x020c,	0x0a0c,	0x0604,	0x0e04,	0x060c,	0x0e0c, 
	0x0002,	0x0802,	0x000a,	0x080a,	0x0402,	0x0c02,	0x040a,	0x0c0a, 
	0x0006,	0x0806,	0x000e,	0x080e,	0x0406,	0x0c06,	0x040e,	0x0c0e, 
	0x0202,	0x0a02,	0x020a,	0x0a0a,	0x0602,	0x0e02,	0x060a,	0x0e0a, 
	0x0206,	0x0a06,	0x020e,	0x0a0e,	0x0606,	0x0e06,	0x060e,	0x0e0e, 
	0x0100,	0x0900,	0x0108,	0x0908,	0x0500,	0x0d00,	0x0508,	0x0d08, 
	0x0104,	0x0904,	0x010c,	0x090c,	0x0504,	0x0d04,	0x050c,	0x0d0c, 
	0x0300,	0x0b00,	0x0308,	0x0b08,	0x0700,	0x0f00,	0x0708,	0x0f08, 
	0x0304,	0x0b04,	0x030c,	0x0b0c,	0x0704,	0x0f04,	0x070c,	0x0f0c, 
	0x0102,	0x0902,	0x010a,	0x090a,	0x0502,	0x0d02,	0x050a,	0x0d0a, 
	0x0106,	0x0906,	0x010e,	0x090e,	0x0506,	0x0d06,	0x050e,	0x0d0e, 
	0x0302,	0x0b02,	0x030a,	0x0b0a,	0x0702,	0x0f02,	0x070a,	0x0f0a, 
	0x0306,	0x0b06,	0x030e,	0x0b0e,	0x0706,	0x0f06,	0x070e,	0x0f0e, 
	0x0001,	0x0801,	0x0009,	0x0809,	0x0401,	0x0c01,	0x0409,	0x0c09, 
	0x0005,	0x0805,	0x000d,	0x080d,	0x0405,	0x0c05,	0x040d,	0x0c0d, 
	0x0201,	0x0a01,	0x0209,	0x0a09,	0x0601,	0x0e01,	0x0609,	0x0e09, 
	0x0205,	0x0a05,	0x020d,	0x0a0d,	0x0605,	0x0e05,	0x060d,	0x0e0d, 
	0x0003,	0x0803,	0x000b,	0x080b,	0x0403,	0x0c03,	0x040b,	0x0c0b, 
	0x0007,	0x0807,	0x000f,	0x080f,	0x0407,	0x0c07,	0x040f,	0x0c0f, 
	0x0203,	0x0a03,	0x020b,	0x0a0b,	0x0603,	0x0e03,	0x060b,	0x0e0b, 
	0x0207,	0x0a07,	0x020f,	0x0a0f,	0x0607,	0x0e07,	0x060f,	0x0e0f, 
	0x0101,	0x0901,	0x0109,	0x0909,	0x0501,	0x0d01,	0x0509,	0x0d09, 
	0x0105,	0x0905,	0x010d,	0x090d,	0x0505,	0x0d05,	0x050d,	0x0d0d, 
	0x0301,	0x0b01,	0x0309,	0x0b09,	0x0701,	0x0f01,	0x0709,	0x0f09, 
	0x0305,	0x0b05,	0x030d,	0x0b0d,	0x0705,	0x0f05,	0x070d,	0x0f0d, 
	0x0103,	0x0903,	0x010b,	0x090b,	0x0503,	0x0d03,	0x050b,	0x0d0b, 
	0x0107,	0x0907,	0x010f,	0x090f,	0x0507,	0x0d07,	0x050f,	0x0d0f, 
	0x0303,	0x0b03,	0x030b,	0x0b0b,	0x0703,	0x0f03,	0x070b,	0x0f0b, 
	0x0307,	0x0b07,	0x030f,	0x0b0f,	0x0707,	0x0f07,	0x070f,	0x0f0f, 
}; 


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