Annotation of generator/cpu68k/test/test-sbcd.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: 
                      3: /* SYNTAX: a.out A B Z */
                      4: /* e.g. ./a.out 31 32 1 subs 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:   sint8 outdata_low = (dstdata & 0xF) - (srcdata & 0xF) - XFLAG;
                     33:   sint16 precalc = dstdata - srcdata - XFLAG;
                     34:   sint16 outdata_tmp = precalc;
                     35: 
                     36:   if (outdata_low < 0)
                     37:     outdata_tmp-= 0x06;
                     38:   if (outdata_tmp < 0) {
                     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) && ((outdata & 1<<7) == 0);
                     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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.