Annotation of cci/d/demand/bio.c, revision 1.1

1.1     ! root        1: 
        !             2: #include "definitions"
        !             3: 
        !             4: /*     I/O ROUTINES TO CPU2 CONSOLE    */
        !             5: 
        !             6: #define MAXC           1000            /* MAX 1000 chars per line */
        !             7: #define OUTADR         0x20000         /* Address of output buffer */
        !             8: #define INADR          0x20100         /* Address of input buffer  */
        !             9: 
        !            10: long ocnt = 0;                         /* Next location in output buffer */
        !            11: long icnt = 0;                         /* Next location in input buffer */
        !            12: extern long savvec7;
        !            13: 
        !            14: writec(c)              /* VERSION to run on the simmulator */
        !            15: char c;
        !            16: {
        !            17: 
        !            18: /*     asm("mfpr $MME,_savvec7");
        !            19:        asm("movl *$0x418,_savvec7");
        !            20:        savvec7 = savvec7 & 0x1;
        !            21:        asm("mtpr $0,$MME");
        !            22: */
        !            23: 
        !            24:        putchar(c);
        !            25: /*     asm("mtpr _savvec7,$MME");       Restore MME */
        !            26: }
        !            27: 
        !            28: readc(c)
        !            29: char *c;
        !            30: {      char *cptr;
        !            31: 
        !            32: /*     asm("mfpr $MME,_savvec7");      */
        !            33:        asm("movl *$0x414,_savvec7");   /* Cheat mfpr MME */
        !            34:        savvec7 = savvec7 & 0x1;
        !            35:        asm("mtpr $0,$MME");            /* Disable MME */
        !            36:        cptr = (char *)(INADR+ icnt++);
        !            37:        *c = *cptr;
        !            38:        asm("mtpr _savvec7,$MME");      /* Restore MME */
        !            39: }
        !            40: 
        !            41: writes(s)
        !            42: char *s;
        !            43: {      char *str;
        !            44:        int ix;
        !            45: 
        !            46:        str = s;
        !            47:        for(ix=0;;ix++)
        !            48:        {
        !            49:        if (str[ix]==NULL) break;
        !            50:                else writec(str[ix]);
        !            51:        }
        !            52: }
        !            53: 
        !            54: /*     This function read a string of characters.
        !            55:        calling sequence : nochar = reads(s);
        !            56:        input argument   : char *s;
        !            57:        return value     : no. of char read; excluding NULL or CR.
        !            58: */
        !            59: reads(s)
        !            60: char *s;
        !            61: {      char *str;
        !            62:        int ix;
        !            63: 
        !            64:        str = s;
        !            65:        for(ix=0;ix<ALINE;ix++)
        !            66:        {
        !            67:                readc(str);
        !            68:                if ((*str==NULL)||(*str==CR)) 
        !            69:                        { *str = NULL;
        !            70:                          break;
        !            71:                        }
        !            72:                     else str++;
        !            73:        }
        !            74:        icnt = 0;               /* For simulator only */
        !            75: 
        !            76:        return(ix);
        !            77: }
        !            78: /*     This function read a string of HEX digit and
        !            79:        convert it to integer value.
        !            80:        calling sequence : stat = readh(ix);
        !            81:        input parameter  : long *ix;
        !            82:        return value     : (stat < 0) if error else (stat = 0);
        !            83: */
        !            84: 
        !            85: /*
        !            86: readh(ix)      
        !            87: long *ix;
        !            88: {      char line[ALINE], *getnum(), *del;
        !            89:        int nochar;
        !            90: 
        !            91:        if ( (nochar = reads(line)) > 8 ) return(-1);
        !            92:        if ( (del = getnum(line,ix,del,HEX)) < 0 ) return(-1);
        !            93:                else return(0);
        !            94: }
        !            95: 
        !            96: */
        !            97: 
        !            98: 
        !            99: 
        !           100: writeh(ix)     /* 32 bits HEX */
        !           101: long ix;
        !           102: {      long iy, temp, mask;
        !           103:        int count;
        !           104:        char c;
        !           105: 
        !           106:        iy=1; count = 28;
        !           107:        mask = 0xf0000000;
        !           108:        while (mask)
        !           109:        {
        !           110:                c = ( (ix&mask) >> count )&0xf;
        !           111:                count -= 4;
        !           112:                mask = mask >> 4;
        !           113:                if (iy) 
        !           114:                        { mask = 0xf000000; 
        !           115:                          iy=0;
        !           116:                        }
        !           117:                if ((c>=0)&&(c<=9)) c=c+'0';
        !           118:                        else c=c+'7';
        !           119:                writec(c);
        !           120:        }
        !           121: }
        !           122: 
        !           123: /*     This function read a string of DEC digit and
        !           124:        convert it to integer value.
        !           125:        calling sequence : stat = readd(ix);
        !           126:        input parameter  : long *ix;
        !           127:        return value     : (stat < 0) if error else (stat = 0);
        !           128: */
        !           129: 
        !           130: /*
        !           131: readd(ix)      
        !           132: long *ix;
        !           133: {      char line[ALINE], *getnum(), *del;
        !           134:        int nochar;
        !           135: 
        !           136:        if ( (nochar = reads(line)) > 11 ) return(-1);
        !           137:        if ( (del = getnum(line,ix,del,DEC)) < 0 ) return(-1);
        !           138:                else return(0);
        !           139: }
        !           140: */
        !           141: 
        !           142: 
        !           143: writed(ix)     /* 32 bits DECIMAL */
        !           144: long ix;
        !           145: {      char c;
        !           146:        long div;
        !           147:        float divi;
        !           148:        int lead0;
        !           149: 
        !           150: /*
        !           151:        if (ix<0) 
        !           152:                {  writes("********");
        !           153:                   return(0);        }
        !           154:        lead0 = 1;
        !           155:        divi = 1000000000;
        !           156:        div = divi;
        !           157:        while (div)
        !           158:        {
        !           159:                c = (ix/div)+'0';
        !           160:                ix = ix%div;
        !           161:                divi = divi/10;
        !           162:                div = divi;
        !           163:                if ((c=='0')&&(lead0)) c=SPACE;
        !           164:                        else lead0 = 0;
        !           165:                writec(c);
        !           166:        }
        !           167: */
        !           168: 
        !           169: }
        !           170: 

unix.superglobalmegacorp.com

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