#include "dos.h"

#include "iostream.h"

void interrupt myfunc_8();

void interrupt myfunc_9();

void interrupt (*prev_8)();

void interrupt (*prev_9)();

int vdustate=1,savestate=0,tickctr=0,ticklimit=182;

//ticklimit(for 10 sec)assuming the clock has fequency of 18.2 Mhz

unsigned ax,dx,si,es;

int adapter=0x3d8; //type of monotor VGE,EGA,CGA etc.

 

main()

{

      unsigned long far *intkbd;

      unsigned long far *intclock;

 

      intkbd=(unsigned long far*)(9*4);

      prev_9=(void (interrupt far*)())*intkbd;

      *intkbd=(unsigned long)myfunc_9;

 

      intclock=(unsigned long far*)(8*4);

      prev_8=(void (interrupt far*)())*intclock;

      *intclock=(unsigned long)myfunc_8;

 

      keep(0,2500);

      return 0;

}

 

void interrupt myfunc_9()

{

      void putvduon();

      cout<<"\ninto mufunc_9";

      ax=_AX;

      enable();

      savestate=0;

      if(vdustate==0)

            putvduon();

      _AX=ax;

      disable();

      (*prev_9)();

      return;

}

 

void interrupt myfunc_8()

{

      void putvduoff();

      ax=_AX;

      if(savestate==0)

            {

                  tickctr++;

                  if(tickctr>=ticklimit)

                        {

                              tickctr=0;

                              savestate=1;

                              putvduoff();

                        }

 

            }

      _AX=ax;

      (*prev_8)();

      return;

}

 

void putvduon()

{

      disable();

      cout<<"\ninto putvduon";

      ax=_AX;

      dx=_DX;

      si=_SI;

      es=_ES;

      _AL=peekb(0x40,0x65);

      _ES=es;

      _SI=si;

      outportb(adapter,_AL);

      vdustate=1;

      _DX=dx;

      _AX=ax;

      enable();

      return;

}

 

void putvduoff()

{

      ax=_AX;

      dx=_DX;

      disable();

      cout<<"\ninto putvduoff";

      outportb(adapter,0x25);

      vdustate=0;

      _DX=dx;

      _AX=ax;

      enable();

      return;

}