📄 gp2gpcitest.c
字号:
* This routine calls the functions that will display polygons * on the screen that are generated by passing parameters to the * gp2's context blocks. * * First create 2, 1 meg screen save areas in memory then test * with hsr mode turned on, then hsr mode turned off. * The mem_screens are used to save the 1st and 2nd paints of * each pattern and compare them each other. If they don't match * and error will be displayed. ******************************************************************** */test_polygons(){ char *hsr; int k; int planes = GP2_BUFSIZ - 1; if ( !CgTWO ) planes = 0xFFFFFF; if ((!exec_by_sundiag) || (debug)) gp_send_message(0, DEBUG, "\n\tTesting Polygons Commands\n"); mem_screen = create_screen(); mem_screen1 = create_screen(); loadmap(); for (k = 0; k < 2; k++) { switch(k) { case 0: hsr = "on"; init_static_blk1(); break; case 1: hsr = "off"; init_static_blk2(); break; } pr_putattributes(screen, &planes); paint_polygons(hsr, mem_screen, mem_screen1); }}/* ******************************************************************** * test_arbiter * * This routine calls the functions that will test the arbiter * by writing into the cg9 from the p2 and vme simultaneously. * * First create 2, 1 meg screen save areas in memory then test * with hsr mode turned on, then hsr mode turned off. * The mem_screens are used to save the 1st and 2nd paints of * each pattern and compare them each other. If they don't match * and error will be displayed. ******************************************************************** */test_arbiter() { int k; int planes = 0xFFFFFF; if ((!exec_by_sundiag) || (debug)) gp_send_message(0, DEBUG, "\n\tTesting Arbitration \n"); loadmap(); for (k = 0; k < 2; k++) { init_arbiter(k); pr_putattributes(screen, &planes); do_arbitration(k); }} /* ******************************************************************** * init_arbiter * * 1). set color to blue * 2). set to rop mode * 3). set hidden serface removal on. * 4). set width and line text. * 5). set view port whole screen. * 6). set to normal transform matrix. * 7). set clip list to whole screen. * 8). if option == 1 then set dither on ******************************************************************** */init_arbiter(dither_on_off)int dither_on_off;{ unsigned int bitvec; int offset; int planesmask; short *shmptr; float ftemp; offset = 0; offset = gp1_alloc(gp1_shmem, 1, &bitvec, minordev, ioctlfd); if(offset == 0) gp_send_message(-DEV_NO_STATBLK, FATAL, init_arbiter_msg1); shmptr = &((short *) gp1_shmem)[offset]; *shmptr++ = GP1_USE_CONTEXT | statblk; *shmptr++ = GP1_SET_FB_NUM | gp1_d(screen)->cg2_index; *shmptr++ = GP1_SET_ROP; *shmptr++ = PIX_SRC; pr_getattributes(screen, &planesmask); *shmptr++ = GP1_SET_CLIP_PLANES | 0x3F; *shmptr++ = GP1_SET_HIDDEN_SURF | GP1_ZBHIDDENSURF; *shmptr++ = GP1_SET_MAT_NUM | 0; *shmptr++ = GP1_SET_LINE_WIDTH; *shmptr++ = 1; *shmptr++ = 0; *shmptr++ = GP1_SET_LINE_TEX; *shmptr++ = 0; *shmptr++ = 0; *shmptr++ = 0; *shmptr++ = GP1_SET_VWP_3D; ftemp = 576.0; GP1_PUT_F(shmptr, ftemp); ftemp = 576.0; GP1_PUT_F(shmptr, ftemp); ftemp = -450.0; GP1_PUT_F(shmptr, ftemp); ftemp = 450.0; GP1_PUT_F(shmptr, ftemp); ftemp = 30000.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); *shmptr++ = GP1_SET_MAT_3D | 0; ftemp = 1.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); ftemp = 1.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); ftemp = 1.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); ftemp = 0.0; GP1_PUT_F(shmptr, ftemp); ftemp = 1.0; GP1_PUT_F(shmptr, ftemp); *shmptr++ = GP1_SET_CLIP_LIST; *shmptr++ = 1; *shmptr++ = 0; *shmptr++ = 0; *shmptr++ = 1152; *shmptr++ = 900; *shmptr++ = GP2_SET_DITHER | dither_on_off; *shmptr++ = GP1_EOCL | GP1_FREEBLKS; GP1_PUT_I(shmptr, bitvec); if ((gp1_post(gp1_shmem, offset, ioctlfd)) != 0) gp_send_message(-SYNC_ERROR, FATAL, init_arbiter_msg2);}/* ******************************************************************** * gp2_arb_poly3 * * This routine will draw some polys in a window and iterate * given number of times switching colors. ******************************************************************** */ gp2_arb_poly3(count,x,y,width,height)int count,x,y,width,height;{ register int m, i, j, *nvp, overflow; unsigned int bitvec; register int offset, roomleft; register short *shmptr, *nvshmptr; register float *ptr; int needed; float xleft,xright,ytop,ybottom,ftemp,r,g,b; int itemp; int blocks_per_transfer = 6; xleft = (float) (((float)x)/((float)(screen->pr_size.x/2.0))-1.0); xright = (float)((float)(x+width)/(float)(screen->pr_size.x/2.0)-1.0); ytop = (float)(-(y/(screen->pr_size.y/2.0))+1.0); ybottom = (float)(-((y+height)/(screen->pr_size.y/2.0))+1.0); offset = 0; offset = gp1_alloc(gp1_shmem, blocks_per_transfer, &bitvec, minordev, ioctlfd); if (offset == 0) { gp_send_message(-DEV_NO_STATBLK, FATAL, gp2_arb_poly3_msg1); } shmptr = &((short *) gp1_shmem)[offset]; *shmptr++ = GP1_USE_CONTEXT | statblk; for(i = 0; i < count; i++) { /* * Clear the z buffer for the specified window. */ *shmptr++ = GP1_SETZBUF; *shmptr++ = 0xFFFF; *shmptr++ = x; *shmptr++ = y; *shmptr++ = width; *shmptr++ = height; if(i%2) { b = .75; *shmptr++ = GP2_XF_PGON_FLT_3D_RGB | GP2_RGB_COLOR_TRIPLE; *shmptr++ = 1; *shmptr++ = 4; g = ftemp = xleft+.05*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(g < 0.0) g *= -1.0; r = ftemp = ytop-.05*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(r < 0.0) r *= -1.0; ftemp = 1.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); g = ftemp = xleft+.5*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(g < 0.0) g *= -1.0; r = ftemp = ytop-.05*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(r < 0.0) r *= -1.0; ftemp = 1.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); g = ftemp = xleft+.85*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(g < 0.0) g *= -1.0; r = ftemp = ytop-.9*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(r < 0.0) r *= -1.0; ftemp = 0.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); g = ftemp = xleft+.35*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(g < 0.0) g *= -1.0; r = ftemp = ytop-.9*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(r < 0.0) r *= -1.0; ftemp = 0.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); r = .75; *shmptr++ = GP2_XF_PGON_FLT_3D_RGB | GP2_RGB_COLOR_TRIPLE; *shmptr++ = 1; *shmptr++ = 4; g = ftemp = xleft+.45*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(g < 0.0) g *= -1.0; b = ftemp = ytop-.1*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(b < 0.0) b *= -1.0; ftemp = 0.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); g = ftemp = xleft+.95*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(g < 0.0) g *= -1.0; b = ftemp = ytop-.1*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(b < 0.0) b *= -1.0; ftemp = 0.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); g = ftemp = xleft+.65*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(g < 0.0) g *= -1.0; b = ftemp = ytop-.95*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(b < 0.0) b *= -1.0; ftemp = 1.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); g = ftemp = xleft+.15*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(g < 0.0) g *= -1.0; b = ftemp = ytop-.95*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(b < 0.0) b *= -1.0; ftemp = 1.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); } else { g = 0.8; *shmptr++ = GP2_XF_PGON_FLT_3D_RGB | GP2_RGB_COLOR_TRIPLE; *shmptr++ = 1; *shmptr++ = 4; r = ftemp = xleft+.05*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(r < 0.0) r *= -1.0; b = ftemp = ytop-.05*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(b < 0.0) b *= -1.0; ftemp = 1.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); r = ftemp = xleft+.5*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(r < 0.0) r *= -1.0; b = ftemp = ytop-.05*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(b < 0.0) b *= -1.0; ftemp = 1.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); r = ftemp = xleft+.85*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(r < 0.0) r *= -1.0; b = ftemp = ytop-.9*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(b < 0.0) b *= -1.0; ftemp = 0.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); r = ftemp = xleft+.35*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(r < 0.0) r *= -1.0; b = ftemp = ytop-.9*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(b < 0.0) b *= -1.0; ftemp = 0.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); r = .9; *shmptr++ = GP2_XF_PGON_FLT_3D_RGB | GP2_RGB_COLOR_TRIPLE; *shmptr++ = 1; *shmptr++ = 4; b = ftemp = xleft+.45*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(b < 0.0) b *= -1.0; g = ftemp = ytop-.1*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(g < 0.0) g *= -1.0; ftemp = 0.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); b = ftemp = xleft+.95*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(b < 0.0) b *= -1.0; g = ftemp = ytop-.1*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(g < 0.0) g *= -1.0; ftemp = 0.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); b = ftemp = xleft+.65*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(b < 0.0) b *= -1.0; g = ftemp = ytop-.95*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(g < 0.0) g *= -1.0; ftemp = 1.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp); ftemp = b; GP1_PUT_F(shmptr,ftemp); b = ftemp = xleft+.15*(xright-xleft); GP1_PUT_F(shmptr,ftemp); if(b < 0.0) b *= -1.0; g = ftemp = ytop-.95*(ytop-ybottom); GP1_PUT_F(shmptr,ftemp); if(g < 0.0) g *= -1.0; ftemp = 1.0; GP1_PUT_F(shmptr,ftemp); ftemp = r; GP1_PUT_F(shmptr,ftemp); ftemp = g; GP1_PUT_F(shmptr,ftemp);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -