|
|
1.1 ! root 1: #include <stdio.h> ! 2: ! 3: /* SYNTAX: a.out A B Z */ ! 4: /* e.g. ./a.out 31 32 1 adds 0x31 + 0x32 with Z flag set */ ! 5: ! 6: typedef unsigned char uint8; ! 7: typedef signed char sint8; ! 8: typedef unsigned short uint16; ! 9: typedef signed short sint16; ! 10: typedef unsigned int uint32; ! 11: typedef signed int sint32; ! 12: ! 13: int main(int argc, char *argv[]) ! 14: { ! 15: uint16 a[3]; ! 16: ! 17: if (argc < 3 || ! 18: sscanf(argv[1], "%x", &a[0]) == 0 || ! 19: sscanf(argv[2], "%x", &a[1]) == 0 || ! 20: sscanf(argv[3], "%x", &a[2]) == 0) { ! 21: printf("Syntax: <hexval> <hexval> <xflag>\n"); ! 22: exit(1); ! 23: } ! 24: ! 25: uint8 dstdata = a[0]; ! 26: uint8 srcdata = a[1]; ! 27: uint8 XFLAG = a[2]; ! 28: uint8 NFLAG, VFLAG; ! 29: uint8 CFLAG; ! 30: ! 31: uint8 outdata; ! 32: uint8 outdata_low = (dstdata & 0xF) + (srcdata & 0xF) + XFLAG; ! 33: uint16 precalc = dstdata + srcdata + XFLAG; ! 34: uint16 outdata_tmp = precalc; ! 35: ! 36: if (outdata_low > 0x09) ! 37: outdata_tmp+= 0x06; ! 38: if (outdata_tmp > 0x90) { ! 39: outdata_tmp+= 0x60; ! 40: CFLAG = 1; ! 41: XFLAG = 1; ! 42: } else { ! 43: CFLAG = 0; ! 44: XFLAG = 0; ! 45: } ! 46: outdata = outdata_tmp; ! 47: if (outdata) printf("ZFLAG = 0\n"); ! 48: NFLAG = ((sint8)outdata) < 0; ! 49: VFLAG = ((precalc & 1<<7) == 0) && (outdata & 1<<7); ! 50: printf("CFLAG = %d\n", CFLAG); ! 51: printf("XFLAG = %d\n", XFLAG); ! 52: printf("NFLAG = %d\n", NFLAG); ! 53: printf("VFLAG = %d\n", VFLAG); ! 54: printf("( precalc = %X outdata = %X )\n", precalc, outdata); ! 55: printf("%X - %X (- %X) = %X\n", dstdata, srcdata, XFLAG, outdata); ! 56: exit(0); ! 57: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.