home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / vrac / pmw100.zip / EXAMPLE1.C next >
C/C++ Source or Header  |  1994-11-21  |  2KB  |  101 lines

  1. /*****************************************************************************
  2. This is a simple example of some graphics functions in C. I got a bit bored
  3. one day so I decided to make this little plasma. The original idea came from
  4. Jare/VangeliSTeam's VTIRIS and was converted to C just for fun. This program
  5. also makes use of floating point and inline ASM just to show that they do
  6. indeed work under PMODE/W.
  7. *****************************************************************************/
  8.  
  9. #include <stdio.h>
  10. #include <math.h>
  11.  
  12. #define M_PI 3.141592654
  13. int v,x,y;
  14. unsigned char z;
  15. unsigned char wavetable[256];
  16. unsigned char spd1=1,spd2=2,spd3=3,spd4=4;
  17. unsigned char pos1,pos2,pos3,pos4;
  18. unsigned char tpos1,tpos2,tpos3,tpos4;
  19.  
  20. unsigned char *vidmem=0xA0000;
  21.  
  22. unsigned char pal[768];
  23.  
  24. void vmode(unsigned short);
  25. void waitvr(void);
  26. #pragma aux vmode="int 10h",parm[ax] modify[ax];
  27. #pragma aux waitvr="mov dx,3dah","wait1: in al,dx","test al,8","jz wait1",modify[al dx];
  28. main()
  29. {
  30. for(x=0,y=0;x<63*3;x+=3,y++) pal[x]=y;
  31. for(x=63*3,y=63;x<127*3;x+=3,y--) pal[x]=y;
  32. for(x=127*3,y=0;x<191*3;x+=3,y++) pal[x+2]=y;
  33. for(x=191*3,y=63;x<255*3;x+=3,y--) pal[x+2]=y;
  34. for(x=0;x<256;x++) wavetable[x]=30*(1+sin(x*2*M_PI/256));
  35.  
  36. vmode(0x13);
  37. tweakvga();
  38. setpal(pal);
  39.  
  40. while(!kbhit()){
  41. waitvr();
  42. v=0;
  43. tpos1=pos1;
  44. tpos2=pos2;
  45. for(x=0;x<50;x++){
  46.     tpos3=pos3;
  47.     tpos4=pos4;
  48.     for(y=0;y<80;y++){
  49.         z=wavetable[tpos1]+wavetable[tpos2]+wavetable[tpos3]+wavetable[tpos4];
  50.         vidmem[v]=z;
  51.         v++;
  52.         tpos3+=1;
  53.         tpos4+=3;
  54.         }
  55.     tpos1+=2;
  56.     tpos2+=1;
  57.     }
  58. pos1+=spd1;
  59. pos2-=spd2;
  60. pos3+=spd3;
  61. pos4-=spd4;
  62. }
  63.  
  64. getch();
  65. vmode(3);
  66. exit(0);
  67. }
  68.  
  69. setpal(unsigned char palp[])
  70. {
  71. unsigned int pcount;
  72. outp(0x3c8,0);
  73. for(pcount=0;pcount<768;pcount+=3){
  74.     outp(0x3c9,palp[pcount]);
  75.     outp(0x3c9,palp[pcount+1]);
  76.     outp(0x3c9,palp[pcount+2]);
  77. }
  78. return 0;
  79. }
  80.  
  81. void tweakvga(void);
  82. #pragma aux tweakvga=\
  83.         "mov dx,3c4h",\
  84.         "mov ax,604h",\
  85.         "out dx,ax",\
  86.         "mov ax,0f02h",\
  87.         "out dx,ax",\
  88.         "mov dx,3d4h",\
  89.         "mov ax,14h",\
  90.         "out dx,ax",\
  91.         "mov ax,0e317h",\
  92.         "out dx,ax",\
  93.         "mov al,9",\
  94.         "out dx,al",\
  95.         "inc dx",\
  96.         "in al,dx",\
  97.         "and al,0e0h",\
  98.         "add al,7",\
  99.         "out dx,al",\
  100.         modify [ax dx];
  101.