⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qdcons.c

📁 open bsd stand lib of sys
💻 C
📖 第 1 页 / 共 3 页
字号:
	    adder->y_scan_count_0 = 0x01;	    adder->y_scan_count_1 = 0x01;	    adder->y_scan_count_2 = 0x01;	    adder->y_scan_count_3 = 0x01;	    wait_status(adder, VSYNC);	/* delay at least 1 full frame time */	    wait_status(adder, VSYNC);	    /* now load the REAL sync values (in reverse order just to	    *  be safe.  */	    adder->y_scan_count_3 = 0x0388;	    adder->y_scan_count_2 = 0x2366;	    adder->y_scan_count_1 = 0x3363;	    adder->y_scan_count_0 = 0x135F;  	}/*----------------------------* zero the index registers */	adder->x_index_pending = 0;	adder->y_index_pending = 0;	adder->x_index_new = 0;	adder->y_index_new = 0;	adder->x_index_old = 0;	adder->y_index_old = 0;	adder->pause = 0;/*----------------------------------------* set rasterop mode to normal pen down */	adder->rasterop_mode = DST_WRITE_ENABLE | DST_INDEX_ENABLE | NORMAL;/*--------------------------------------------------* set the rasterop registers to a default values */	adder->source_1_dx = 1;	adder->source_1_dy = 1;	adder->source_1_x = 0;	adder->source_1_y = 0;	adder->destination_x = 0;	adder->destination_y = 0;	adder->fast_dest_dx = 1;	adder->fast_dest_dy = 0;	adder->slow_dest_dx = 0;	adder->slow_dest_dy = 1;   	adder->error_1 = 0;	adder->error_2 = 0;/*------------------------* scale factor = unity */	adder->fast_scale = UNITY;	adder->slow_scale = UNITY;/*-------------------------------* set the source 2 parameters */	adder->source_2_x = 0;	adder->source_2_y = 0;	adder->source_2_size = 0x0022;/*-----------------------------------------------* initialize plane addresses for eight vipers */	write_ID(adder, CS_UPDATE_MASK, 0x0001);	write_ID(adder, PLANE_ADDRESS, 0x0000);	write_ID(adder, CS_UPDATE_MASK, 0x0002);	write_ID(adder, PLANE_ADDRESS, 0x0001);	write_ID(adder, CS_UPDATE_MASK, 0x0004);	write_ID(adder, PLANE_ADDRESS, 0x0002);	write_ID(adder, CS_UPDATE_MASK, 0x0008);	write_ID(adder, PLANE_ADDRESS, 0x0003);	write_ID(adder, CS_UPDATE_MASK, 0x0010);	write_ID(adder, PLANE_ADDRESS, 0x0004);	write_ID(adder, CS_UPDATE_MASK, 0x0020);	write_ID(adder, PLANE_ADDRESS, 0x0005);	write_ID(adder, CS_UPDATE_MASK, 0x0040);	write_ID(adder, PLANE_ADDRESS, 0x0006);	write_ID(adder, CS_UPDATE_MASK, 0x0080);	write_ID(adder, PLANE_ADDRESS, 0x0007);	/* initialize the external registers. */	write_ID(adder, CS_UPDATE_MASK, 0x00FF);	write_ID(adder, CS_SCROLL_MASK, 0x00FF);	/* initialize resolution mode */	write_ID(adder, MEMORY_BUS_WIDTH, 0x000C);     /* bus width = 16 */	write_ID(adder, RESOLUTION_MODE, 0x0000);      /* one bit/pixel */	/* initialize viper registers */	write_ID(adder, SCROLL_CONSTANT, SCROLL_ENABLE|VIPER_LEFT|VIPER_UP);	write_ID(adder, SCROLL_FILL, 0x0000);/*----------------------------------------------------* set clipping and scrolling limits to full screen */	for ( i = 1000, adder->status = 0	    ; i > 0  &&  !((status = adder->status) & ADDRESS_COMPLETE)	    ; --i);	if (i == 0)	    printf("timeout trying to setup clipping\n");	top = 0;	bottom = 2048;	left = 0;	right = 1024;	adder->x_clip_min = left;	adder->x_clip_max = right;	adder->y_clip_min = top;	adder->y_clip_max = bottom;	adder->scroll_x_min = left;	adder->scroll_x_max = right;	adder->scroll_y_min = top;	adder->scroll_y_max = bottom;	wait_status(adder, VSYNC);	/* wait at LEAST 1 full frame */	wait_status(adder, VSYNC);	adder->x_index_pending = left;	adder->y_index_pending = top;	adder->x_index_new = left;	adder->y_index_new = top;	adder->x_index_old = left;	adder->y_index_old = top;	for ( i = 1000, adder->status = 0	    ; i > 0  &&  !((status = adder->status) & ADDRESS_COMPLETE)	    ; --i);	if (i == 0)	    printf("timeout waiting for ADDRESS_COMPLETE bit\n");	write_ID(adder, LEFT_SCROLL_MASK, 0x0000);	write_ID(adder, RIGHT_SCROLL_MASK, 0x0000);/*------------------------------------------------------------* set source and the mask register to all ones (ie: white) */	write_ID(adder, SOURCE, 0xFFFF);	write_ID(adder, MASK_1, 0xFFFF);	write_ID(adder, VIPER_Z_LOAD | FOREGROUND_COLOR_Z, 255);	write_ID(adder, VIPER_Z_LOAD | BACKGROUND_COLOR_Z, 0);/*--------------------------------------------------------------* initialize Operand Control Register banks for fill command */	write_ID(adder, SRC1_OCR_A, EXT_NONE | INT_M1_M2  | NO_ID | WAIT);	write_ID(adder, SRC2_OCR_A, EXT_NONE | INT_SOURCE | NO_ID | NO_WAIT);	write_ID(adder, DST_OCR_A, EXT_NONE | INT_NONE   | NO_ID | NO_WAIT);	write_ID(adder, SRC1_OCR_B, EXT_NONE | INT_SOURCE | NO_ID | WAIT);	write_ID(adder, SRC2_OCR_B, EXT_NONE | INT_M1_M2  | NO_ID | NO_WAIT);	write_ID(adder, DST_OCR_B, EXT_NONE | INT_NONE | NO_ID | NO_WAIT);/*------------------------------------------------------------------* init Logic Unit Function registers, (these are just common values,* and may be changed as required).  */	write_ID(adder, LU_FUNCTION_R1, FULL_SRC_RESOLUTION | LF_SOURCE);	write_ID(adder, LU_FUNCTION_R2, FULL_SRC_RESOLUTION | LF_SOURCE | INV_M1_M2);	write_ID(adder, LU_FUNCTION_R3, FULL_SRC_RESOLUTION | LF_D_OR_S);	write_ID(adder, LU_FUNCTION_R4, FULL_SRC_RESOLUTION | LF_D_XOR_S);/*----------------------------------------* load the color map for black & white */		for ( i = 0, adder->status = 0	    ; i < 10000  &&  !((status = adder->status) & VSYNC)	    ; ++i);	if (i == 0)	    printf("timeout waiting for VSYNC bit\n");	red = (short *) qdmap.red;	green = (short *) qdmap.green;	blue = (short *) qdmap.blue;	*red++ = 0x00;			/* black */	*green++ = 0x00;	*blue++ = 0x00;	*red-- = 0xFF;			/* white */	*green-- = 0xFF;	*blue-- = 0xFF;	/*----------------------------------	* set color map for mouse cursor */	red += 254;	green += 254;	blue += 254;	*red++ = 0x00;			/* black */	*green++ = 0x00;	*blue++ = 0x00;	*red = 0xFF;			/* white */	*green = 0xFF;	*blue = 0xFF;/*---------------------------------------------------------------------------* clear the bitmap a piece at a time.  Since the fast scroll clear only clears* the current displayed portion of the bitmap put a temporary value in the y* limit register so we can access whole bitmap  */	adder->x_limit = 1024;	adder->y_limit = 2048 - CHAR_HEIGHT;	adder->y_offset_pending = 0;	wait_status(adder, VSYNC);	/* wait at LEAST 1 full frame */	wait_status(adder, VSYNC);	adder->y_scroll_constant = SCROLL_ERASE;	wait_status(adder, VSYNC);	wait_status(adder, VSYNC);	adder->y_offset_pending = 864;	wait_status(adder, VSYNC);	wait_status(adder, VSYNC);	adder->y_scroll_constant = SCROLL_ERASE;	wait_status(adder, VSYNC);	wait_status(adder, VSYNC);	adder->y_offset_pending = 1728;	wait_status(adder, VSYNC);	wait_status(adder, VSYNC);	adder->y_scroll_constant = SCROLL_ERASE;	wait_status(adder, VSYNC);	wait_status(adder, VSYNC);	adder->y_offset_pending = 0;     /* back to normal */	wait_status(adder, VSYNC);	wait_status(adder, VSYNC);	adder->x_limit = MAX_SCREEN_X;	adder->y_limit = MAX_SCREEN_Y + FONT_HEIGHT;	*memcsr = SYNC_ON | UNBLANK;	/* turn off leds and turn on video */	return(0);} /* setup_dragon *//********************************************************************	setup_input()... init the DUART and set defaults in input*			 devices*******************************************************************/setup_input(){	register struct duart *duart;	/* DUART register structure pointer */	register int bits;	int i, j;			/* scratch variables */	short status;/*---------------* init stuff */	duart = (struct duart *) qdmap.duart;/*---------------------------------------------* setup the DUART for kbd & pointing device */	duart->cmdA = RESET_M;    /* reset mode reg ptr for kbd */	duart->modeA = 0x13;	  /* 8 bits, no parity, rcv IE, */	 			  /* no RTS control,char error mode */	duart->modeA = 0x07;	  /* 1 stop bit,CTS does not IE XMT */				  /* no RTS control,no echo or loop */	duart->auxctl = 0x00;	  /* baud rate set 1 */	duart->clkselA = 0x99;	  /* 4800 baud for kbd */        /* reset everything for keyboard */	for (bits = RESET_M; bits < START_BREAK; bits += 0x10)	    duart->cmdA = bits;	duart->cmdA = EN_RCV | EN_XMT; /* enbl xmt & rcv for kbd *//*--------------------------* init keyboard defaults *//*	for (i = 500; i > 0; --i) {    	    if ((status = duart->statusA) & XMT_RDY) {        	duart->dataA = LK_DEFAULTS;		break;    	    }	}	for (j = 0; j < 3; ++j) {	    for (i = 50000; i > 0; --i) {    	        if ((status = duart->statusA) & RCV_RDY) {		    status = duart->dataA;		    break; 	        }	    }	}	if (i == 0)	    printf("LK-201 init error\n");*//*--------* exit */	return(0);} /* setup_input *//************************************************************************	wait_status()... delay for at least one display frame time**************************************************************************	calling convention:**		wait_status(adder, mask);*		struct *adder adder;*		int mask;**	return: BAD means that we timed out without ever seeing the*	              vertical sync status bit*		GOOD otherwise***************/wait_status(adder, mask)register struct adder *adder;register int mask;{	register short status;	int i;	for ( i = 10000, adder->status = 0	    ; i > 0  &&  !((status = adder->status) & mask)	    ; --i);	if (i == 0) {	    printf("timeout polling for 0x%x in adder->status\n", mask);	    return(BAD);	}	return(GOOD);} /* wait_status *//************************************************************************	write_ID()... write out onto the ID bus**************************************************************************	calling convention:**		struct *adder adder;	;pntr to ADDER structure*		short adrs;		;VIPER address*		short data;		;data to be written*		write_ID(adder);**	return: BAD means that we timed out waiting for status bits*		      VIPER-access-specific status bits*		GOOD otherwise***************/write_ID(adder, adrs, data)register struct adder *adder;register short adrs;register short data;{	int i;	short status;	for ( i = 100000, adder->status = 0	    ; i > 0  &&  !((status = adder->status) & ADDRESS_COMPLETE)	    ; --i);	if (i == 0)	    goto ERR;	for ( i = 100000, adder->status = 0	    ; i > 0  &&  !((status = adder->status) & TX_READY)	    ; --i);	if (i > 0) {	    adder->id_data = data;	    adder->command = ID_LOAD | adrs;	    return(GOOD);	}ERR:	printf("timeout trying to write to VIPER\n");	return(BAD);} /* write_ID */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -