Tweak vga 320x200 (exemple fire)

Description

un Tweak de la carte VGA pour produire des flammes inspiré d'un code en assembleur par DenthoRof Asphyxia

Source / Exemple :


#include <dos.h>
#include <mem.h>
#include <alloc.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include "320x200p.c"
extern FirePal[];
extern firerandom();
ouports();
void  grtwfire(unsigned char *reals,unsigned char *virts,int virtl)
{
     unsigned char * realscrn ;
     unsigned char * virtscrn ;
      realscrn = reals;
      virtscrn = virts;
    int x,y,z,v,I, lastMode;
    int itmp;
    regptr rarray;
    rarray = Mode320x200 ;
   memset(virtscrn,0,virtl);
   memset(realscrn,0,32767);
	_AH = 0x0f;
	geninterrupt(0x10);
	lastMode = _AL;
       _AX = 0x13;
	geninterrupt(0x10);
      /////////////////////////
       outportb(0x3D4,0x11)  ;  //Enable Vga Mode
       v=inportb(0x3D5)&0x7f;
       outportb(0x3d4,0x11) ;
       outportb(0x3d5,v);
     for (int i = 0;i<25;i++)
     {
     outports((*rarray++));
     }
     outpw (0x3C4,0x0F02);   // Enable all plane
     ////////////////////////
    /*  outpw (0x3C4,0x0604);//    //unchained mode
       outpw (0x3C4,0x0F02);   // Enable all plane
      outpw (0x3D4,0x0014);// Disable Dword Mode
      outpw (0x3D4,0xE317);  //enable byte mode
     outpw (0x3D4,0x0409);   //set cell height */
     ///////////////////////////////////////////
	 outp(0x3c8, 0); // start with color 0
	 for (y = 0; y<768; y++)
		{
		outp(0x3c9, FirePal[y] );

		}
	///////////////////////////////////////////
	//mainloop
	  do
	{
	  I = virtl-80;
	 //nouvell ligne

	 for (int i =0;i<80;i++)  {
	virtscrn[I+i]=firerandom();}
	 //average moyenne
	 I = 80;

	 for (i=0 ;i< virtl-80;i++)
	  {
	     itmp = virtscrn[I+i] ;
	     itmp+=virtscrn[I+i+1];
	     itmp+=virtscrn[I+i-1] ;
	     itmp+=virtscrn[I+i+80];

		 unsigned char itmpc = itmp>>2  ;
	       if(!(itmpc)==0)itmpc--;

		 virtscrn[I+i-80] = itmpc;
	  }
	 //affichage

	 do {}
	 while(inportb(0x3DA)&0x08);
	 do {}
	 while(!inportb(0x3DA)&0x08);
	 delay(18);

	  memcpy(realscrn,virtscrn,virtl);

	 }while (!kbhit());

	  getch();

	_AX = lastMode;
	geninterrupt(0x10);
	//delete rarray;
	return ;
	}
					//outports function
	outports (regstrc r)
	{
	   switch (r.regp)
	   {
	   case 0x3c0:       		//Attribut Controller
		 inportb(0x3da);
		 outportb(0x3c0,r.regi|0x20);
		 outportb(0x3c0,r.regv);
		 break;
	   case 0x3c2: 			 //Miscellaneous reg
		 outportb(r.regp,r.regv);
		 break;				//3c2
	   default:   			 //0x3c4,0x3d4,0x3ce
		 outportb(r.regp,r.regi);
		 outportb(r.regp+1,r.regv);
		 break;
	  }

	}

Conclusion :


elboré sous turbo C ++ 3.00,pour carte VGA

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.