void interrupt irq_service()  | 
  | 
  | 
  | 
{  | 
  | /* read all interrupt state */ | |
new_int_state=inportb(wBase+7)&0x0f;  | |||
int_c=new_int_state^now_int_state;  | /* compare which interrupt  | */  | |
if ((int_c&0x1)!=0)  | 
  | /* signal be change | */  | 
  | /* INT_CHAN_0 is active  | */  | |
{  | /* now P2C0 change to high  | */  | |
if ((new_int_state&0x01)!=0)  | |||
{  | 
  | 
  | 
  | 
CNT_H1++;  | 
  | 
  | 
  | 
}  | /* now P2C0 change to low  | */  | |
else  | |||
{  | 
  | 
  | 
  | 
CNT_L1++;  | 
  | 
  | 
  | 
}  | /* to generate a high pulse  | */  | |
invert=invert^1;  | |||
}  | 
  | 
  | 
  | 
if ((int_c&0x2)!=0)  | 
  | 
  | 
  | 
{  | /* now P5C0 change to high  | */  | |
if ((new_int_state&0x02)!=0)  | |||
{  | 
  | 
  | 
  | 
CNT_H2++;  | 
  | 
  | 
  | 
}  | /* now P5C0 change to low  | */  | |
else  | |||
{  | 
  | 
  | 
  | 
CNT_L2++;  | 
  | 
  | 
  | 
{  | /* to generate a high pulse  | */  | |
invert=invert^2;  | |||
}  | 
  | 
  | 
  | 
if ((int_c&0x4)!=0)  | 
  | 
  | 
  | 
{  | /* now P8C0 change to high  | */  | |
If ((new_int_state&0x04)!=0)  | |||
{  | 
  | 
  | 
  | 
CNT_H3++;  | 
  | 
  | 
  | 
}  | /* now P8C0 change to low  | */  | |
else  | |||
{  | 
  | 
  | 
  | 
CNT_L3++;  | 
  | 
  | 
  | 
}  | /* to generate a high pulse  | */  | |
invert=invert^4;  | |||
}  | 
  | 
  | 
  | 
if ((int_c&0x8)!=0)  | 
  | 
  | 
  | 
{  | /* now P11C0 change to high  | */  | |
if ((new_int_state&0x08)!=0)  | |||
{  | 
  | 
  | 
  | 
CNT_H4++;  | 
  | 
  | 
  | 
{  | /* now P11C0 change to low  | */  | |
else  | |||
{  | 
  | 
  | 
  | 
CNT_L4++;  | 
  | 
  | 
  | 
}  | /* to generate a high pulse  | */  | |
invert=invert^8;  | |||
}  | 
  | 
  | 
  | 
now_int_state=new_int_state;  | 
  | 
  | 
  | 
outportb(wBase+0x2a,invert);  | 
  | 
  | 
  | 
if (wIrq>=8) outportb(A2_8259,0x20); outportb(A1_8259,0x20);
}