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

📄 i_rendering_pipeline.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lintstatic  char sccsid[] = "@(#)i_rendering_pipeline.c 1.1 92/07/30 Copyr 1990 Sun Micro";#endif/* * Copyright (c) 1990 by Sun Microsystems, Inc. */#include <fe_includes.h>#include <hdwr_regs.h>/* Debug mode *//*#define DEBUG		1*/#define MAXCOUNT	100000		/* max count waiting */#define MAX_SAMPLING	0x2D672         /* for PBM's sampling */#define REG(i)	i/* The folowing checksums were acquired by experiments */#define ADDRSUM		0x2E0A238E#define DATASUM		0x579FF88A#define DEPTHSUM	0x3FA3D872/**********************************************************************/voidi_rendering_pipeline(ctxp, umcbp, kmcbp, fputs) /**********************************************************************/register Hk_context	*ctxp;		/* r16 = context      pointer */register Hkvc_umcb	*umcbp;		/* r17 = user mcb     pointer */register Hkvc_kmcb	*kmcbp;		/* r18 = kernel mcb   pointer */register void		(*fputs)();	/* r19 = vcom_fputs() pointer */{    void chksum();#ifdef DEBUG    void hexasc();#endif DEBUG    unsigned int *pbm = (unsigned *)(F_PBM_CSR);    unsigned int *addr = (unsigned *)(XYADDR);    unsigned int *data = (unsigned *)(DATAADDR);    unsigned int *depth = (unsigned *)(DEPTHADDR);    unsigned int rdata;    unsigned int addrsum = 0;    unsigned int datasum = 0;    unsigned int depthsum = 0;    int k;    int count;#ifdef DEBUG	char	string[9];	char    nl[2];	char	comma[3];	nl[0] = '\n';	nl[1] = '\0';	comma[0] = ',';	comma[1] = ' ';	comma[2] = '\0';#endif DEBUG    /* loop to read output from the SI */    for (k =  MAX_SAMPLING; k ; k--) {	/* only when ready then read the data */	count = MAXCOUNT;	while (!(*pbm & 0x100) && count--);	if (count <= 0) {	    *pbm &= ~0x80;               /* reset SI loopback enable */	    goto error_return;	}	rdata = *addr;	(void)chksum(&addrsum, rdata & 0xfffffff);	rdata = *data;	(void)chksum(&datasum, rdata);	rdata = *depth;	(void)chksum(&depthsum, rdata & 0xffffff);    }    *pbm &= ~0x80;               /* reset SI loopback enable */#ifdef DEBUG    hexasc(addrsum, string);    (void) (*fputs) (string);    (void) (*fputs) (comma);    hexasc(datasum, string);    (void) (*fputs) (string);    (void) (*fputs) (comma);    hexasc(depthsum, string);    (void) (*fputs) (string);    (void) (*fputs) (nl);#else DEBUG    if (addrsum != ADDRSUM ||	datasum != DATASUM ||	depthsum != DEPTHSUM) {	goto error_return;    }#endif    umcbp->errorcode = 0;    return;error_return:#ifdef DEBUG    hexasc(k, string);    (void) (*fputs) (string);    (void) (*fputs) (nl);#endif DEBUG    umcbp->errorcode = -4;    return;}/**********************************************************************/voidchksum(sum, data)/**********************************************************************/unsigned int *sum;unsigned int data;{    unsigned int oldsum;    oldsum = *sum;    *sum += data;    if (*sum < oldsum) {	(*sum)++;    }}#ifdef DEBUG/**********************************************************************/voidhexasc(hex, str)/**********************************************************************/unsigned int hex;char *str;{    unsigned char c;    int i;    for (i=0 ; i < 8 ; i++) {	c = (char)(hex & 0xf);	str[7-i] = (c < 0xa)? c + '0' : (c-0xa) + 'A';	hex >>= 4;    }    str[8] = '\0';    return;}#endif DEBUG

⌨️ 快捷键说明

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