Annotation of cci/d/pits/init.x, revision 1.1

1.1     ! root        1: 
        !             2: /*     init.s                                                          */
        !             3: 
        !             4: 
        !             5: /*     This file is a diagnostic version of locore.s.                  */
        !             6: /*     It contains the following:                                      */
        !             7: /*     *system data area = scb, dump buffer, interrupt stack,          */
        !             8: /*     *system page table,user page tables,pcbs,iomap, & io buffers.   */
        !             9: /*                                                                     */
        !            10: /*     *system code = interrupt vectors, initialization of system data,*/
        !            11: /*     *memory size calculation,initialization of SPT, zeroing of      */
        !            12: /*     *unused memory, & loading of SBR & SLR.                         */
        !            13: /*     *                                                               */
        !            14: /*     *at the end of this code, you are ready to go to virtual mode.  */
        !            15: /*     * --- GOOD LUCK!                                                */
        !            16: 
        !            17: 
        !            18: #include       "conf.h"
        !            19: /*     privileged registers addresses  */
        !            20: #include       "prvreg.h"
        !            21:        
        !            22: /*     program status long word definition     */
        !            23: #include       "psl.h" 
        !            24: 
        !            25: /*     page table entry definition             */
        !            26: #include       "pte.h"
        !            27:        
        !            28: /*     process control block offsets   */
        !            29: #include       "pcboffset.h"   
        !            30: 
        !            31: /*     fundamental constants for globl use     */
        !            32: #include       "const.h"       
        !            33: 
        !            34: /*     system control block offsets*/
        !            35: #include       "scboffset.h"
        !            36: /*     SPT offsets                             */
        !            37: #include       "sptoffset.h"
        !            38: 
        !            39: /*     trap numbers*/
        !            40: #include       "trap.h"        
        !            41: 
        !            42: 
        !            43: #define V_TRAP         0
        !            44: #define V_SYSCALL      4
        !            45: 
        !            46:        .set    HIGH,0x1f       /*mask for disabling all interrupts     */
        !            47:        .set    MCKVEC,4        /*scb offset for machinecheck vector    */
        !            48:        .set    NISP,2          /*no. of interrupt stack pages          */
        !            49:        .set    DONE,255        /*user process done code                */
        !            50: 
        !            51:        .text
        !            52: 
        !            53: #include "pstorage.s"          /* PROCESSOR STORAGE AREA               */
        !            54: 
        !            55:        .globl  _Entry
        !            56: _Entry:
        !            57:        mtpr    $0x1f,$IPL
        !            58:        jmp     start
        !            59:        .space  (1024-9)
        !            60: 
        !            61: 
        !            62: 
        !            63: /*             globl dump buffer to be used for communication          */
        !            64: /*             between tests & interrupt handlers, & other misc.       */
        !            65: /*             purposes.                                               */
        !            66:                                
        !            67:                                /*physical page 3                       */
        !            68: 
        !            69:        .set    NLWU,32         /*no. of longwords already used         */
        !            70:                                /*this must be changed when you define  */
        !            71:                                /*additional variables below before     */
        !            72:                                /*_dbuf                                 */
        !            73:        .globl  _restart
        !            74: _restart:
        !            75:        .space  4               /*contains restart address for restarting*/
        !            76:                                /*after power is restored (loaded by    */
        !            77:                                /*power fail interrupt handler & used by*/
        !            78:                                /*CPU 2                                 */      
        !            79: /*     ******************      */
        !            80:        .globl  _cyconf         /*  address : 0xc04                     */
        !            81: _cyconf:                       /*  Cypher configuration pointer : 0xc06  */
        !            82:        .space  4
        !            83:        .space  4
        !            84: /*     ******************      */
        !            85: 
        !            86:        .globl  _Unused
        !            87: _Unused:
        !            88:        .space  4               /* Just a copy of variable 'unused'     */
        !            89: 
        !            90:        .globl  _unused
        !            91: _unused:
        !            92:        .space  4               /*first unused page in system space     */
        !            93: 
        !            94:        .globl  _ctlblk
        !            95: _ctlblk:
        !            96:        .long   0               /* pointer to SCB */
        !            97: 
        !            98:        .globl  _savvec0        /*save vectors area                     */
        !            99: _savvec0:
        !           100:        .space  4
        !           101: 
        !           102:        .globl  _savvec1        /*save vectors area                     */
        !           103: _savvec1:
        !           104:        .space  4
        !           105: 
        !           106:        .globl  _savvec2        /*save vectors area                     */
        !           107: _savvec2:
        !           108:        .space  4
        !           109: 
        !           110:        .globl  _savvec3        /*save vectors area                     */
        !           111: _savvec3:
        !           112:        .space  4
        !           113: 
        !           114:        .globl  _savvec4        /*save vectors area                     */
        !           115: _savvec4:
        !           116:        .space  4
        !           117: 
        !           118:        .globl  _savvec5        /*save vectors area                     */
        !           119: _savvec5:
        !           120:        .space  4
        !           121:        .globl  _savvec6        /*save vectors area                     */
        !           122: _savvec6:
        !           123:        .space  4
        !           124:        .globl  _savvec7        /*save vectors area                     */
        !           125: _savvec7:
        !           126:        .space  4
        !           127: 
        !           128:        .globl  _savvec8        /*save vectors area                     */
        !           129: _savvec8:
        !           130:        .space  4
        !           131: 
        !           132: testno: .long  0
        !           133: 
        !           134:        .globl  _dbuf           /*dump buffer left out of 1K            */
        !           135:        .globl  _r_no
        !           136: _r_no:
        !           137:        .long   0
        !           138:        .globl  _pt_base
        !           139: _pt_base:
        !           140:        .long   0
        !           141:        .globl  _saved_psl
        !           142: _saved_psl:
        !           143:        .long   0
        !           144:        .globl  _saved_sp
        !           145: _saved_sp:
        !           146:        .long   0
        !           147:        .globl  _saved_fp
        !           148: _saved_fp:
        !           149:        .long   0
        !           150:        .globl  _p_ptr
        !           151: _p_ptr:
        !           152:        .long   0
        !           153:        .globl  _ret_adr
        !           154: _ret_adr:
        !           155:        .long   0
        !           156:        .globl  _exp_par0
        !           157: _exp_par0:
        !           158:        .long   0
        !           159:        .globl  _exp_par1
        !           160: _exp_par1:
        !           161:        .long   0
        !           162:        .globl  _exp_par2
        !           163: _exp_par2:
        !           164:        .long   0
        !           165:        .globl  _exp_par3
        !           166: _exp_par3:
        !           167:        .long   0
        !           168:        .globl  _act_par0
        !           169: _act_par0:
        !           170:        .long   0
        !           171:        .globl  _act_par1
        !           172: _act_par1:
        !           173:        .long   0
        !           174: 
        !           175:        .globl  _IOpage
        !           176: _IOpage:
        !           177:        .long   0               /* Pointer 64K I/O pages */
        !           178: #
        !           179: #
        !           180: #
        !           181:        .globl  _proc_no
        !           182: _proc_no:
        !           183:        .long   0
        !           184: 
        !           185:        .globl  _clk_cnt
        !           186: _clk_cnt:
        !           187:        .long   0
        !           188: _dbuf:
        !           189:        .space  NBPG - (NLWU *4)
        !           190: edbuf:
        !           191: 
        !           192: 
        !           193:        .globl  _intstack       /* Interrupt stack                      */
        !           194: _intstack:                     /* Physical pages 4 & 5                 */
        !           195:        .space  NISP*NBPG
        !           196: eintstack:
        !           197: 
        !           198: 
        !           199:        .set    SYSPTSIZE,512   /* No. of entries in SPT                */
        !           200:  
        !           201: /*
        !           202:        System Page Table -- physical page 6 & 7
        !           203: */ 
        !           204:        .align  2
        !           205:        .globl  _Sysmap
        !           206: _Sysmap:
        !           207:        .space  SYSPTSIZE*4     /* 512 max pages allowed for system     */
        !           208: eSysmap:
        !           209:        .globl  _Syssize
        !           210:        .set    _Syssize,(eSysmap-_Sysmap)/4    /* should be SYSPTSIZE  */
        !           211:        
        !           212:        .globl  _iomap          /* Physical page 8      */
        !           213: _iomap:        .space  1024            /* IOMAP - unused       */
        !           214:        .globl  _eiomap
        !           215: _eiomap:
        !           216: 
        !           217:        .globl  _pcb0           /* Physical page 9      */
        !           218: _pcb0: .space  128             /*process control block 0               */
        !           219:        .globl  _pcb1
        !           220: _pcb1: .space 128              /*process control block 1               */
        !           221:        .globl  _pcb2
        !           222: _pcb2: .space 128              /*process control block 2               */
        !           223:        .globl  _pcb3
        !           224: _pcb3: .space 128              /*process control block 3               */
        !           225:        .globl  _pcb4
        !           226: _pcb4: .space 128              /*process control block 4               */
        !           227:        .globl  _pcb5
        !           228: _pcb5: .space 128              /*process control block 5               */
        !           229:        .globl  _pcb6
        !           230: _pcb6: .space 128              /*process control block 6               */
        !           231:        .globl  _pcb7
        !           232: _pcb7: .space 128              /*process control block 7               */
        !           233: 
        !           234: /*
        !           235:        *user #0 page tables -- P0PT, P1PT, P2PT                        
        !           236:        *physical memory     --  page10, 11, & 12  respectively
        !           237: */
        !           238:        .align  2
        !           239:        .globl  _u0p0pt
        !           240: _u0p0pt:
        !           241:        .space  1024            /*255 max pages for user #0 text        */
        !           242:        .globl  _u0p1pt
        !           243: _u0p1pt:       
        !           244:        .space  1024            /*255 max pages for user #0 data        */
        !           245:        .globl  _u0p2pt
        !           246: _u0p2pt:       
        !           247:        .space  1020            /*255 max pages for user #0 stack       */
        !           248: eu0p2pt:
        !           249:        .space  4
        !           250: 
        !           251: /*
        !           252:        *user #1 page tables -- P0PT, P1PT, P2PT                        
        !           253:        *physical memory     --  page13 ,14, & 15  respectively
        !           254: */
        !           255:        .align  2
        !           256:        .globl  _u1p0pt
        !           257: _u1p0pt:
        !           258:        .space  1024            /*255 max pages for user #1 text        */
        !           259:        .globl  _u1p1pt
        !           260: _u1p1pt:       
        !           261:        .space  1024            /*255 max pages for user #1 data        */
        !           262:        .globl  _u1p2pt
        !           263: _u1p2pt:       
        !           264:        .space  1020            /*255 max pages for user #1 stack       */
        !           265: eu1p2pt:
        !           266:        .space  4
        !           267: 
        !           268: 
        !           269: /*
        !           270:        *user #2 page tables -- P0PT, P1PT, P2PT                        
        !           271:        *physical memory     --  page 16, 17 , & 18  respectively
        !           272: */
        !           273:        .align  2
        !           274:        .globl  _u2p0pt
        !           275: _u2p0pt:
        !           276:        .space  1024            /*255 max pages for user #2 text        */
        !           277:        .globl  _u2p1pt
        !           278: _u2p1pt:       
        !           279:        .space  1024            /*255 max pages for user #2 data        */
        !           280:        .globl  _u2p2pt
        !           281: _u2p2pt:       
        !           282:        .space  1020            /*255 max pages for user #2 stack       */
        !           283: eu2p2pt:
        !           284:        .space  4
        !           285: 
        !           286: 
        !           287: /*
        !           288:        *user #3 page tables -- P0PT, P1PT, P2PT                        
        !           289:        *physical memory     --  page 19, 20 , & 21  respectively
        !           290: */
        !           291:        .align  2
        !           292:        .globl  _u3p0pt
        !           293: _u3p0pt:
        !           294:        .space  1024            /*255 max pages for user #3 text        */
        !           295:        .globl  _u3p1pt
        !           296: _u3p1pt:       
        !           297:        .space  1024            /*255 max pages for user #3 data        */
        !           298:        .globl  _u3p2pt
        !           299: _u3p2pt:       
        !           300:        .space  1020            /*255 max pages for user #3 stack       */
        !           301: eu3p2pt:
        !           302:        .space  4
        !           303: 
        !           304: /*
        !           305:        *user #4 thru 6 page tables
        !           306:        *physical memory -- pages 22 thru 30
        !           307: */
        !           308:        .globl  _u4p0pt
        !           309: _u4p0pt:
        !           310:        .space  (9*NBPG) - 4
        !           311: eu6p2pt:
        !           312:        .space  4
        !           313: 
        !           314: /*
        !           315:        *user #7 page tables -- P0PT, P1PT, P2PT                        
        !           316:        *physical memory     --  page 31, 32 , & 33  respectively
        !           317: */
        !           318:        .align  2
        !           319:        .globl  _u7p0pt
        !           320: _u7p0pt:
        !           321:        .space  1024            /*255 max pages for user #7 text        */
        !           322:        .globl  _u7p1pt
        !           323: _u7p1pt:       
        !           324:        .space  1024            /*255 max pages for user #7 data        */
        !           325:        .globl  _u7p2pt
        !           326: _u7p2pt:       
        !           327:        .space  1020            /*255 max pages for user #7 stack       */
        !           328: eu7p2pt:
        !           329:        .space  4
        !           330: 
        !           331:        .globl  _Ksp0           /* Page used for Kernel stack of user0 */
        !           332: _Ksp0: .space  1020
        !           333: _Eksp0:        .long   0
        !           334: 
        !           335:        .globl  _Ksp1           /* Page used for Kernel stack of user1 */
        !           336: _Ksp1: .space  1020
        !           337: _Eksp1:        .long   0
        !           338: 
        !           339:        .globl  _Ksp2           /* Page used for Kernel stack of user2 */
        !           340: _Ksp2: .space  1020
        !           341: _Eksp2:        .long   0
        !           342: 
        !           343:        .globl  _Ksp3           /* Page used for Kernel stack of user3 */
        !           344: _Ksp3: .space  1020
        !           345: _Eksp3:        .long   0
        !           346: 
        !           347:        .globl  _Ksp4           /* Page used for Kernel stack of user4 */
        !           348: _Ksp4: .space  1020
        !           349: _Eksp4:        .long   0
        !           350: 
        !           351:        .globl  _Ksp5           /* Page used for Kernel stack of user5 */
        !           352: _Ksp5: .space  1020
        !           353: _Eksp5:        .long   0
        !           354: 
        !           355:        .globl  _Ksp6           /* Page used for Kernel stack of user6 */
        !           356: _Ksp6: .space  1020
        !           357: _Eksp6:        .long   0
        !           358: #
        !           359: #      I/O buffers
        !           360: #
        !           361:        .globl  _iob0
        !           362: _iob0: .space  1024
        !           363:        .globl  _iob1
        !           364: _iob1: .space  1024
        !           365:        .globl  _iob2
        !           366: _iob2: .space  1024
        !           367:        .globl  _iob3
        !           368: _iob3: .space  1024
        !           369:        .globl  _iob4
        !           370: _iob4: .space  1024
        !           371:        .globl  _iob5
        !           372: _iob5: .space  16384
        !           373: 
        !           374: esysdata:
        !           375: 
        !           376: #include "scblock.s"           /* SYSTEM CONTROL BLOCK                 */
        !           377: 
        !           378: 
        !           379: 
        !           380: 
        !           381: 
        !           382: 
        !           383: #include       "evthandlers.s" /*event handlers                        */
        !           384: 
        !           385: #define        ACBL(_n1,_n2,_n3,_n4) \
        !           386: addl2  _n2,_n3;\
        !           387: cmpl   _n3,_n1;\
        !           388: bleq   _n4;
        !           389: 
        !           390: 
        !           391: 
        !           392: /*
        !           393:        *INITIALIZATION CODE
        !           394:        *
        !           395:        * MME off; mode = k; IPL = 31; IS = 1
        !           396:        *
        !           397: */
        !           398: 
        !           399:        .globl  start
        !           400: start:
        !           401:        mtpr    $0x1f,$IPL      /* Set IPL to HIGH */
        !           402:        mtpr    $0,$MME         /* Disable MME */
        !           403:        movab   _scb,r0
        !           404:        andl2   $0x3ffffc00,r0
        !           405:        mtpr    r0,$SCBB        /* Set SCBB  */
        !           406: 
        !           407:        movpsl  r1
        !           408:        andl2   $0x001f0000,r1          /* Mask out flags               */
        !           409:        cmpl    r1,$0x001f0000          /* modes = K & IPL = 31?        */
        !           410:        beql    1f
        !           411: 2:     movl    $1,r0
        !           412:        movl    $0x041f0000,r2
        !           413:        halt                    /* PSL not initialized as expected      */
        !           414: 1:
        !           415:        movl    $_intstack+NISP*NBPG,r0
        !           416:        andl2   $0x3fffffff,r0          /* Mask out bit 30,31 */
        !           417:        mtpr    r0,$ISP                 /* init. ISP            */
        !           418:        movl    r0,sp                   /* in case we get exception     */
        !           419:        movab   (sp),fp                 /* Initialize FP                */
        !           420: #
        !           421: #      Clear system data area all the way upto system code
        !           422: #      this includes dump buffer,interrupt stack,spt,iomap,pcbs,user 
        !           423: #      page tables, & io buffer area.
        !           424: #
        !           425: 3:     
        !           426:        movab   esysdata,r7
        !           427:        movab   _restart,r6
        !           428: 1:     clrl    (r6)
        !           429:        ACBL(r7,$4,r6,1b)
        !           430: #
        !           431: #      Initialize System Page Table
        !           432: #
        !           433: 5:
        !           434:        clrl    r2
        !           435:        movab   _Ksp6,r1        /* R1 = Last address in Kernel stack area */
        !           436:        andl2   $0x3fffffff,r1  /* Mask out bit 30,31   */
        !           437:        shar    $PGSHIFT,r1,r1  /* Get page no. of last page of Kstacks  */
        !           438: 1:
        !           439:        movl    r2,r11                  /* Donot want to use orl3 */
        !           440:        orl2    $PG_V|PG_KW,r11
        !           441:        orl2    r11,_Sysmap[r2]
        !           442:        aobleq  r1,r2,1b
        !           443: 
        !           444:        movab   esysdata,r1     /* R1 = Last address in system data area */
        !           445:        andl2   $0x3fffffff,r1  /* Mask out bit 30,31   */
        !           446:        shar    $PGSHIFT,r1,r1  /* Get page no. of last system data addr  */
        !           447: 1:
        !           448:        movl    r2,r11                  /* Donot want to use orl3 */
        !           449:        orl2    $PG_V|PG_KW|PG_NC,r11   /* Set I/O buffers non cachable */
        !           450:        orl2    r11,_Sysmap[r2]
        !           451:        aoblss  r1,r2,1b
        !           452: #
        !           453: #      Map system text area 1 to 1, Kernel read/write.
        !           454: #      For this to work, the label _etext must exist at the end 
        !           455: #      of system code; Add in 4 more pages for data area used in C
        !           456: #
        !           457:        movab   _end + (NBPG-1),r1      /* Map text+data 1 to 1; Kernel R/W */
        !           458:        andl3   $0x3ffffc00,r1,_IOpage
        !           459:        addl2   $64*(1024),r1
        !           460:        andl2   $0x3fffffff,r1
        !           461:        shar    $PGSHIFT,r1,r1
        !           462: 1:
        !           463:        movl    r2,r11
        !           464:        orl2    $PG_V|PG_KW|PG_NC,r11   /* Kernel Read/Write, non_cachable */
        !           465:        orl2    r11,_Sysmap[r2]
        !           466:        aoblss  r1,r2,1b
        !           467: #
        !           468: #      Map from here (1st unused page) to page 512 :
        !           469: #         * invalid,no access, & virtual = physical
        !           470: #
        !           471:        movl    r2,_unused      /* Save first unused physical page no   */
        !           472:        movl    $LSP+1,r1
        !           473: 1:     movl    r2,_Sysmap[r2]
        !           474:        aoblss  r1,r2,1b
        !           475: 
        !           476: sysrdy:
        !           477:        movab   _Sysmap,r0
        !           478:        mtpr    r0,$SBR                 /* Set SYSTEM BASE REG */
        !           479:        mtpr    $_Syssize,$SLR
        !           480:        orl2    $0xc0000000,r0
        !           481:        mtpr    r0,$P0BR                /* Set P0BR */
        !           482:        mtpr    $_Syssize,$P0LR
        !           483: 
        !           484:        movl    $CLOCK,r0
        !           485:        movab   _Xclock,_scb[r0]        /* Set clock handler */
        !           486: 
        !           487:        movl    $BUSER,r0
        !           488:        movab   _Buser,_scb[r0]         /* Set bus error handler */
        !           489: 
        !           490:        clrl    _bturn
        !           491:        clrl    _bell
        !           492:        clrl    _btime
        !           493:        mtpr    $1,$IPL                 /* Allow clock interrupt */
        !           494:        incl    _IOinit                 /* Set flag so bus err don't print */   
        !           495: #
        !           496: #      Probe for VIOCs
        !           497: #
        !           498:        clrl    _viocs
        !           499:        callf   $4,_chk_vadr
        !           500:        movl    r0,_viocs
        !           501: #
        !           502: #      Probe for VDDCs
        !           503: #
        !           504:        clrl    _vddcs
        !           505:        callf   $4,_chk_vdadr
        !           506:        movl    r0,_vddcs
        !           507:        .globl  _ready
        !           508: _ready:
        !           509:        clrl    _proc_no
        !           510:        mtpr    $1,$PACC
        !           511:        mtpr    $1,$PADC
        !           512:        mtpr    $1,$TBIA
        !           513:        mtpr    $1,$CCK                 /* Set Code Cache Key = 1 */
        !           514:        mtpr    $1,$DCK                 /* Set Data Cache Key = 1 */
        !           515:        mtpr    $1,$MME                 /* Enable MME */
        !           516:        jmp     *$1f
        !           517: 1:
        !           518:        movab   _pcb0,r0
        !           519:        movab   _Eksp0,(r0)             /* Set PCB0_KSP */
        !           520:        mfpr    $P0BR,PCB_P0BR(r0)      /* Set PCB0_P0BR */
        !           521:        mfpr    $P0LR,PCB_P0LR(r0)      /* Set PCB0_P0LR */
        !           522:        mtpr    r0,$PCBB                /* Init PCBB to PCB_0 */
        !           523:        ldpctx                          /* Just to switch to Kernel stack */
        !           524:        mtpr    $1,$IPL                 /* Drop IPL to 1 */
        !           525:        movl    (sp)+,r12               /* Pop unnecessary PC,PSL */
        !           526:        movl    (sp)+,r11
        !           527: #
        !           528: #      The following tests are included : Tape, Vioc, Vddc.
        !           529: #      Bit 0-2 of R0 correspond to Tape, Vioc, Vddc test. To disable
        !           530: #      a particular test just set the corresponding bit to 1 before
        !           531: #      start. For example, if only VIOC test to be run, set R0=5.
        !           532: #      To run all, set R0 = 0. This process is now done by the
        !           533: #      routine 'echo'.
        !           534: #
        !           535: #      Now that MME, probe for magtape
        !           536: #
        !           537: 1:     clrl    _tapes
        !           538:        callf   $4,_chk_tape
        !           539:        movl    r0,_tapes
        !           540:        mfpr    $SLR,_Sslr              /* Save original SLR */
        !           541:        movl    _unused,_Unused         /* Save 1st unused page */
        !           542: go:
        !           543:        mtpr    _Sslr,$SLR              /* Reinit. SLR with original value  */
        !           544:        movl    _Unused,_unused         /* always restore it !! */
        !           545:        pushab  imsg                    /* Select users options */
        !           546:        callf   $8,_writes              /* Print message */
        !           547:        callf   $8,_echo                /* Get user response */
        !           548:        movl    r0,tst_mask             /* Save user option */
        !           549: #
        !           550: #      Tape Master Test
        !           551: #
        !           552:        andl3   $0x1,tst_mask,r0        /* Is Tape test selected */
        !           553:        jneq    1f                      /* Skip to next test if not */
        !           554:        callf   $4,_tape                /* set up to test tape */
        !           555:        cmpl    $0,r0                   /* See if there was a controller */
        !           556:        jeql    2f
        !           557:        callf   $4,_tm_ex               /* Test magtape */
        !           558: 2:
        !           559:        clrl    _tape_ON                /* next test */
        !           560:        brw     1f
        !           561: #
        !           562: #      VIOCs Test
        !           563: #
        !           564: 1:
        !           565:        andl3   $0x2,tst_mask,r0
        !           566:        bneq    1f
        !           567:        tstl    _viocs          /* Any VIOCs to test ? */
        !           568:        beql    2f
        !           569:        callf   $4,_init_vec    /* Set up interrupt handlers for VIOCs */
        !           570:        callf   $4,_vioc        /* VIOC test */
        !           571:        clrl    _vioc_ON        /* next test */
        !           572:        brw     1f
        !           573: 2:
        !           574:        pushab  nmsg            /* print no VIOCs message */
        !           575:        callf   $4,_writes
        !           576: #
        !           577: #      VDDC Controller Test
        !           578: #
        !           579: 1:
        !           580:        andl3   $0x4,tst_mask,r0
        !           581:        jneq    1f
        !           582:        tstl    _vddcs          /* Any VDDCs to test ? */
        !           583:        beql    1f
        !           584:        callf   $4,_vddc        /* Set up to test VDDCs */
        !           585:        cmpl    $0,r0           /* See if there were any controllers */
        !           586:        jeql    2f
        !           587:        callf   $4,_vddc_ex     /* Test VDDCs */
        !           588: 2:
        !           589:        clrl    _vddc_ON        /* Print Done msg */
        !           590:        brw     1f
        !           591: #
        !           592: #
        !           593: #
        !           594: 1:
        !           595:        clrl    _Berr                   /* Clear the bus error flag */
        !           596:        clrl    _IOinit
        !           597:        clrl    _Multi
        !           598:        movl    tst_mask,r0
        !           599:        jmp     go                      /* Restart the test   */
        !           600: #
        !           601: #      Real time clock Handler
        !           602: #
        !           603:        .align  2
        !           604:        .globl  _Xclock
        !           605: _Xclock:
        !           606:        rei
        !           607: 
        !           608: #
        !           609: #      Bus error handler
        !           610: #
        !           611:        .align  2
        !           612:        .globl  _Buser
        !           613: _Buser:
        !           614:        movab   (sp),-(sp)              /* Push pointer to error parameter */
        !           615:        callf   $8,_buserror
        !           616:        incl    _Berr
        !           617:        movl    (sp)+,r0
        !           618:        movl    (sp)+,r0
        !           619:        rei
        !           620: 
        !           621: #
        !           622: # badaddr(addr, len)
        !           623: #      see if access addr with a len type instruction causes a machine check
        !           624: #      len is length of access (1=byte, 2=short, 4=long)
        !           625: #      r0 = 0 means good(exists); r0 =1 means does not exist.
        !           626: #
        !           627:        .globl  _badaddr
        !           628: _badaddr:
        !           629:        .word   0x1c    # Keep r4,r3,r2
        !           630:        mfpr    $IPL,r1
        !           631:        mtpr    $HIGH,$IPL
        !           632:        movl    _scb+BEVEC,r2
        !           633:        movl    4(fp),r3
        !           634:        movl    8(fp),r4
        !           635:        movab   9f,_scb+BEVEC
        !           636:        bbc     $0,r4,1f; tstb  (r3)
        !           637: 1:     bbc     $1,r4,1f; tstw  (r3)
        !           638: 1:     bbc     $2,r4,1f; tstl  (r3)
        !           639: 1:     clrl    r0                      # made it w/o machine checks
        !           640: 2:     movl    r2,_scb+BEVEC
        !           641:        mtpr    r1,$IPL
        !           642:        ret
        !           643: 
        !           644:        .align  2
        !           645: 9:                     # Here we catch buss error (if it comes)
        !           646:        andl3   4(sp),$0x7,r0   # check ERRCD
        !           647:        cmpl    r0,$1           # check APE
        !           648:        jneq    1f
        !           649:        halt                    # Address parity error !!!
        !           650: 1:     cmpl    r0,$5           # check VBE
        !           651:        jneq    1f
        !           652:        halt                    # Versabus error
        !           653: 1:
        !           654:        movl    $1,r0           # Anything else = bad address
        !           655:        movab   8(sp),sp        # discard buss error trash
        !           656:        movab   2b,(sp)         # new program counter on stack.
        !           657:        rei
        !           658: #
        !           659: #
        !           660: #
        !           661:        .data
        !           662:        .align  2
        !           663: _Sslr:
        !           664:        .long   0
        !           665: tst_mask:
        !           666:        .long   0
        !           667: _bell: .long   0
        !           668: _bturn: .long  0
        !           669: _btime: .long  0
        !           670:        .globl  _Multi
        !           671: _Multi:  .long 0
        !           672:        .globl  _Berr
        !           673: _Berr: .long   0
        !           674:        .globl  _IOinit
        !           675: _IOinit: .long 0
        !           676:        .globl  _tape_ON
        !           677: _tape_ON:
        !           678:        .long   1
        !           679:        .globl  _vioc_ON
        !           680: _vioc_ON:
        !           681:        .long   1
        !           682:        .globl  _vddc_ON
        !           683: _vddc_ON:
        !           684:        .long   1
        !           685:        .globl  _tapes
        !           686: _tapes:
        !           687:        .long   0
        !           688:        .globl  _viocs
        !           689: _viocs:
        !           690:        .long   0
        !           691:        .globl  _vddcs
        !           692: _vddcs:
        !           693:        .long   0
        !           694:        .align  1
        !           695: imsg:  .ascii  "\n\nPeripherial Integrated Test System r1.2\n",
        !           696:        .ascii  "\nSelect one of the following :\n",
        !           697:        .ascii  "\n     0 - Run all test",
        !           698:        .ascii  "\n     1 - Tape Master test",
        !           699:        .ascii  "\n     2 - VIOC test",
        !           700:        .ascii  "\n     3 - VDDC test\n",
        !           701:        .ascii  "\nEnter the appropriate test number : \0"
        !           702: nmsg:  .ascii  "\n\nNo VIOCs are installed\n\0"

unix.superglobalmegacorp.com

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