Exemplo n.º 1
0
t_stat fp_unpack (uint32 ad, FPA *fp)
{
uint8 d0, d1, esign;

esign = M[ad] & FLAG;                                   /* get exp sign */
d0 = M[ad] & DIGIT;                                     /* get exp lo digit */
MM (ad);
if ((M[ad] & FLAG) == 0)                                /* no flag on hi exp? */
    return STOP_FPMF;
d1 = M[ad] & DIGIT;                                     /* get exp hi digit */
MM (ad);
fp->addr = ad;                                          /* save mant addr */
if (BAD_DIGIT (d1) || BAD_DIGIT (d0))                   /* exp bad dig? */
    return STOP_INVDIG;
fp->exp = ((d1 * 10) + d0) * (esign? -1: 1);            /* convert exponent */
fp->sign = (M[ad] & FLAG)? 1: 0;                        /* get mantissa sign */
return fp_scan_mant (fp->addr, &(fp->lnt), &(fp->zero));
}
Exemplo n.º 2
0
int32 dp_cvt_ad (uint8 *ap)
{
    int32 i, r;
    uint8 c;

    for (i = r = 0; i < DP_ADDR; i++, ap++) {               /* loop thru addr */
        c = *ap & DIGIT;                                    /* get digit */
        if (BAD_DIGIT (c))                                  /* bad digit? */
            return -1;
        r = (r * 10) + c;                                   /* bcd to binary */
    }
    return r;
}
Exemplo n.º 3
0
int32 dp_cvt_bcd (uint32 ad, int32 len)
{
    uint8 c;
    int32 r;

    for (r = 0; len > 0; len--) {                           /* loop thru char */
        c = M[ad] & DIGIT;                                  /* get digit */
        if (BAD_DIGIT (c))                                  /* invalid? */
            return -1;
        r = (r * 10) + c;                                   /* cvt to bin */
        PP (ad);                                            /* next digit */
    }
    return r;
}