home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.tar / ftp.whtech.com / Geneve / 9640news / CAT36 / EMULSRC.ZIP / STATUS.C < prev    next >
Text File  |  1993-03-31  |  777b  |  43 lines

  1. /* This part provides the status register handling */
  2.  
  3. #define SIGN 0x8000
  4.  
  5. void set_status(word value)
  6. {
  7.     EQ=(value==0);
  8.     LGT=!EQ;
  9.     AGT=LGT && (!(value&SIGN));
  10. }
  11.  
  12.  
  13. void get_status(void)
  14. {
  15.     STATUS=(LGT<<15)|(AGT<<14)|(EQ<<13)|(CY<<12)|
  16.         (OV<<11)|(OP<<10)|(X<<9)|(IMASK&0xf);
  17. }
  18.  
  19. void set_parity(word value) /* copyright by T. Brouwer! */
  20. {
  21. #define PARCHECK 0x6996
  22.  
  23.     OP=(    (PARCHECK >> (value>>12)) ^
  24.         ( PARCHECK >> ((value>>8)&15) )    )&1;
  25. }
  26.  
  27. void compare(word source,word dest)
  28. {
  29.     LGT=(source>dest);
  30.     EQ=(source==dest);
  31.     AGT=((signed int)source>(signed int)dest);
  32. }
  33.  
  34. word add(word a, word b)
  35. {
  36.     word c;
  37.     c=a+b;
  38.     CY=(((a&b)&SIGN)!=0) || (((a&SIGN) != (b&SIGN)) &&((c&SIGN)==0));
  39.     OV=((~a&~b&c&SIGN) || (a&b&~c&SIGN))!=0;
  40.     return(c);
  41. }
  42.  
  43.