Annotation of cci/d/mem/monitor.c, revision 1.1

1.1     ! root        1:                /*      constant definitions for program                */
        !             2: #define LINE     80
        !             3: #define CRTN      0x0d
        !             4: #define EOL       '.'
        !             5: #define INTSIZE   8
        !             6: #define msg1   "\n**************** Memory Test (V1.1) ****************"
        !             7: #define msg2   "\nSUBTEST              TITLE"
        !             8: #define msg3   "\n   0         Execute subtest 1 - 6"
        !             9: #define msg4   "\n   1         Marching patterns"
        !            10: #define msg5   "\n   2         Unique address"
        !            11: #define msg6   "\n   3         Adjacent cell disturbance"
        !            12: #define msg7   "\n   4         ECC single bit error correct"
        !            13: #define msg8   "\n   5         ECC single bit (data) error detection"
        !            14: #define msg9   "\n   6         ECC single bit (check) error detection"
        !            15: #define        NL      '\012'
        !            16: #define MAX_TST                6       /* Max. no of subtests */
        !            17: #include "definitions"
        !            18: 
        !            19: extern long maxmem,count,tstmsk,endprog,nonstop;
        !            20: extern  long loop_flg,hlt_flg,prt_flg,test_no;
        !            21: extern struct  OPTIONS OPTIONS;
        !            22: long abend,abmax;
        !            23: int bitbl[8] = { 1,2,4,8,16,32,64,128};
        !            24: 
        !            25: monitor()
        !            26: {      
        !            27:        int number;
        !            28:        long startadd,endadd;
        !            29:        long debug,debuga,debugb,debugc;
        !            30:        prt_flg = loop_flg = 0;
        !            31:        abend = endprog;
        !            32:        abmax = maxmem;
        !            33:        /**********************************************************
        !            34:        If the header option was set, output test header and report
        !            35:        memory size as calculated in init.x, also indicate brd type
        !            36:        **********************************************************/
        !            37:        if (OPTIONS.header) {
        !            38:                writes(msg1);                   
        !            39:                writes("\n\nMemory size = "); 
        !            40:                writed(maxmem); writes(" bytes;");
        !            41:                if (OPTIONS.fourmb) {
        !            42:                        writes(" 4mb memory board option selected\n");
        !            43:                        }
        !            44:                else    {
        !            45:                        writes(" 1mb memory board option selected\n");
        !            46:                }
        !            47:        }
        !            48:        if (!OPTIONS.diagmode) {
        !            49:                endprog = abend;
        !            50:                maxmem = abmax;
        !            51:                }
        !            52:        /*************************************************************
        !            53:        If the diagnostic mode flag is set, query user for parameters.
        !            54:        Output the ending address of the memory program and max memory
        !            55:        address.  Check the validity of the start and ending addresses 
        !            56:        entered by the user.
        !            57:        *************************************************************/
        !            58:        if (OPTIONS.diagmode) {                 
        !            59:                writes("\nminimum memory address is ");writeh(endprog);
        !            60:                writes("\n\nmaximum memory address is ");writeh(maxmem);
        !            61: start:         writes("\n\nenter starting memory address : ");
        !            62:                startadd = gethex();
        !            63:                if (startadd >= endprog){ 
        !            64:                    endprog = startadd;
        !            65:                    }
        !            66:                else{
        !            67:                    writes("\nthe starting address must be >= "); 
        !            68:                    writeh(endprog);    
        !            69:                    goto start;
        !            70:                    }
        !            71: end:           writes("\n\nenter ending memory address : ");
        !            72:                endadd = gethex();
        !            73:                if (endadd > startadd && endadd <= maxmem){
        !            74:                    maxmem = endadd;
        !            75:                    }
        !            76:                else{
        !            77:                    writes("\nthe ending address must be > "); 
        !            78:                    writeh(startadd);
        !            79:                    writes(" and <= ");
        !            80:                    writeh(maxmem);
        !            81:                    goto end;
        !            82:                    }   
        !            83:                gettest();
        !            84:                writes("\n\nenter cycle count : ");count = gethex();
        !            85:                if (count == 0xffffffff) nonstop = 1;
        !            86:                if (count == 0x0) count = 1;
        !            87:                }
        !            88:        /***************************************************************
        !            89:        If the selected test was greater than MAX_TST then set tstmsk to
        !            90:        run all tests.  Otherwise set tstmsk to the selected test.      
        !            91:        ***************************************************************/
        !            92:        if (!test_no) tstmsk = 1|2|4|8|16|32;           
        !            93:                else {
        !            94:                        number = test_no;               
        !            95:                        tstmsk = bitbl[--number];
        !            96:                }
        !            97:        if (OPTIONS.err_msg) prt_flg =1;
        !            98:        if (OPTIONS.loop_err) loop_flg =1; 
        !            99:                else hlt_flg = 1;
        !           100: }
        !           101:                /**************************************************** 
        !           102:                This routine gets the user input and validates it, if
        !           103:                an invalid response is made the user will be queried 
        !           104:                again.
        !           105:                ****************************************************/
        !           106: gettest()
        !           107: {
        !           108: int valid;
        !           109: char c;
        !           110: valid = 1;
        !           111: while(valid){
        !           112:        writes("\n\nenter subtest number or '?' for help : ");
        !           113:        c = readc();
        !           114:        switch(c){
        !           115:                case '0':
        !           116:                        test_no = 0;
        !           117:                        valid = 0;
        !           118:                        break;
        !           119:                case '1':
        !           120:                        test_no = 1;
        !           121:                        valid = 0;
        !           122:                        break;
        !           123:                case '2':
        !           124:                        test_no = 2;
        !           125:                        valid = 0;
        !           126:                        break;
        !           127:                case '3':
        !           128:                        test_no = 3;
        !           129:                        valid = 0;
        !           130:                        break;
        !           131:                case '4':
        !           132:                        test_no = 4;
        !           133:                        valid = 0;
        !           134:                        break;
        !           135:                case '5':
        !           136:                        test_no = 5;
        !           137:                        valid = 0;
        !           138:                        break;
        !           139:                case '6':
        !           140:                        test_no = 6;
        !           141:                        valid = 0;
        !           142:                        break;
        !           143:                case '?':
        !           144:                        tsthelp();
        !           145:                        break;
        !           146:                default:
        !           147:                        writes("  invalid test number");
        !           148:                        break; }
        !           149:        }
        !           150: return;
        !           151: }
        !           152:        /*********************************************************
        !           153:        This routine just outputs the test numbers and description
        !           154:        to the user
        !           155:        *********************************************************/
        !           156: tsthelp()
        !           157: {
        !           158: writes("\n");writes(msg2);writes(msg3);writes(msg4);writes(msg5);
        !           159: writes(msg6);writes(msg7);writes(msg8);writes(msg9);
        !           160: return;
        !           161: }
        !           162:        /**********************************************************
        !           163:        Hex input routine, call fill and validates the characters
        !           164:        in the character buffer. Then returns the HEX value back to 
        !           165:        the calling routine.
        !           166:        **********************************************************/
        !           167: gethex() 
        !           168: {
        !           169:        char s[LINE];
        !           170:        int k[1],i,n;
        !           171:        n=0x0;
        !           172:        fill(s,k);                      /* Fill s[] */ 
        !           173:        for (i=0;i<k[0];++i) {
        !           174:          if (s[i] >= 'a' && s[i] <= 'f')
        !           175:         n=0x10*n+s[i]-'W';
        !           176:         if (s[i] >= 'A' && s[i] <= 'F')
        !           177:         n=0x10*n+s[i]-'7';
        !           178:         if (s[i] >= '0' && s[i] <= '9')
        !           179:         n=0x10*n+s[i]-'0';
        !           180:         if ((s[i] < '0' ) || (s[i] > '9' && s[i] < 'A') || (s[i]  > 'F' 
        !           181:             && s[i] < 'a') || (s[i] > 'f')) 
        !           182:         {
        !           183:         writes("\nInvalid hex digit: "); writec(s[i]); writes(" (ignored)");
        !           184:         }
        !           185:        }
        !           186:        return(n);
        !           187: }
        !           188:        /****************************************************
        !           189:        This routine fills a character buffer with characters
        !           190:        that are input on the console.
        !           191:        ****************************************************/
        !           192: fill(s,k)
        !           193: char s[];
        !           194: int k[];
        !           195: {
        !           196:        char c;
        !           197:        int i;
        !           198:        k[0]=0;
        !           199:        for (i=0;(c=readc())!=CRTN;++i)
        !           200:        {
        !           201:        if (k[0]>LINE - 1) break;
        !           202:        if (c==EOL)        break;
        !           203:        s[i]=c;
        !           204:        ++k[0];
        !           205:        }
        !           206: }

unix.superglobalmegacorp.com

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