Annotation of cci/d/macro4/monitor.c, revision 1.1.1.1

1.1       root        1: 
                      2: #include "macro4_defs.h"
                      3: 
                      4: /*********************************************************************
                      5: *
                      6: *       MONITOR FOR THE FPP INSTRUCTION TESTS
                      7: *
                      8: *  20-Jul-85 : written
                      9: *********************************************************************/
                     10: monitor()
                     11: {
                     12: int no_subtests;                        /* number of tests in the table */
                     13:         force_loop = FALSE;             /* clear the 'force loop' flag  */
                     14:         cycle = 0;                      /* clear the cycle count        */
                     15:         errcnt = 0;                     /* clear the error count        */
                     16:         error  = FALSE;                 /* clear the current error flag */
                     17:         if( no_fpp_wcs ) {
                     18:              test_tbl = no_fpp_test_tbl;        /* use the NO-FPP tests */
                     19:              no_subtests = no_fpp_test_cnt;
                     20:         } else {
                     21:              test_tbl = fpp_test_tbl;           /* use the FPP tests */
                     22:              no_subtests = fpp_test_cnt;
                     23:         }
                     24: /*
                     25:  * Print the Header information and enable the Data Cache if desired
                     26: */
                     27:        if( prt_hdrs ) {
                     28:             writes("\nMacro4 Test");
                     29:            if( no_fpp_wcs )
                     30:                 writes(" - FPP is NOT installed");
                     31:            else
                     32:                 writes(" - FPP is installed");
                     33:        }
                     34:         if( en_data_cache ) {
                     35:             if( prt_hdrs )
                     36:                 writes("  - Data Cache Enabled: \n");
                     37:             asm("mtpr $1,$25");                 /* purge all data cache pages */
                     38:             asm("mtpr $1,$27");                 /* enable the data cache */
                     39:         } else {
                     40:             if( prt_hdrs )
                     41:                 writes("  - Data Cache Disabled: \n");
                     42:             asm("mtpr $2,$27");                 /* disable the data cache */
                     43:         }
                     44: /*
                     45:  * Check the run list to see if a specific test is called for
                     46: */
                     47:         for( cycle = 1; ( (cycle <= count) || nonstop ); cycle++ ) {
                     48:              if( (prt_hdrs) && (cycle != 1) )   /* show we're still running */
                     49:                    writec('.');
                     50:              if( (run_list > 0) &&              /* run 1 test only */
                     51:                  (run_list <= no_subtests) ) {
                     52:                    test_no = run_list;
                     53:                    test_index = run_list - 1;
                     54:                    sched_test( test_index );    /* run the test */
                     55:              } else {                           /* run all tests */
                     56:                    for(test_index=0; test_index<no_subtests; test_index++) {
                     57:                          test_no = test_index + 1;
                     58:                          sched_test( test_index );      /* run the test */
                     59:                     }
                     60:             }   /* end of test-all-instructions */
                     61:         }    /* end of test cycles - done with the test */
                     62:         cycle--;                        /* correct cycle count */
                     63:         if( prt_hdrs ) {
                     64: /*          if( !error )  */
                     65:             writec('\n');          /* new line if no current errors */
                     66:             writes("Cycles Complete = ");
                     67:             writed( cycle );
                     68:             if( errcnt ) {
                     69:                   writes(",  Error Count = " );
                     70:                   writed( errcnt );
                     71:                   writes(",  Test Complete\n");
                     72:             } else 
                     73:                   writes(",  TEST PASSED -NO ERRORS!!! \n");
                     74:         };
                     75: /*
                     76:  * Set up the registers to halt
                     77: */
                     78:         asm("movl _errcnt,r0");         /* set error count for halt */
                     79:         asm("bneq 1f");
                     80:         asm("movl $0xCAFEBABE,r0");;    /* set the no-error flag    */
                     81:         asm("1:");
                     82:         asm("movl _OPTIONS,r1");        /* restore options to r1    */
                     83:         asm("movl _cycle,r2");          /* move cycle count to r2   */
                     84:         asm("halt");;
                     85: }
                     86: 
                     87: 
                     88: 
                     89: /***********************************************************************
                     90: *
                     91: *       Start the current subtest
                     92: *
                     93: * The test may come back here after an unexpected event so the monitor's
                     94: * stack and frame pointers are saved. Funny things happen if we try to 
                     95: * exit from this routine with the wrong frame pointer. Unexpected events
                     96: * will either return indirectly through "return" or they will just halt.
                     97: *
                     98: ***********************************************************************/
                     99: sched_test( test_index )
                    100: int test_index;
                    101: {
                    102:         asm("moval (r13),_monitor_fp");         /* save the frame ptr */
                    103:         asm("moval (r14),_monitor_sp");         /* save the stack ptr */
                    104:         test_ptr = test_tbl[ test_index ];     /* get ptr to test */
                    105:         asm("jmp *_test_ptr");                  /* execute the test */
                    106:         asm(".globl _sched_return");
                    107:         asm("_sched_return:");           /* return here after the test */
                    108:         asm("nop");
                    109:         asm("movl _monitor_fp,r13");    /* restore the frame pointer */
                    110:         asm("movl _monitor_sp,r14");;   /* restore the stack pointer */
                    111:         if( FALSE ) {
                    112:              asm(".align 2");
                    113:              asm(".globl return");      /* event return is through here */
                    114:              asm("return:");
                    115:              asm(".long _sched_return");;
                    116:         }
                    117: }
                    118: 

unix.superglobalmegacorp.com

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