Annotation of 41BSD/4.0.upgrade/sys/GENERIC/locore.c, revision 1.1

1.1     ! root        1: #ifdef LOCORE
        !             2: #define        P_LINK 0
        !             3: #define        P_RLINK 4
        !             4: #define        P_ADDR 8
        !             5: #define        P_PRI 13
        !             6: #define        P_STAT 15
        !             7: #define        P_WCHAN 76
        !             8: #define        SSLEEP 1
        !             9: #define        SRUN 3
        !            10: #define        UBA_BRRVR 48
        !            11: #define        UH_UBA 0
        !            12: #define        UH_VEC 8
        !            13: #define        UH_SIZE 52
        !            14: #define        RP_FLAG 12
        !            15: #define        V_SWTCH 0
        !            16: #define        V_TRAP 4
        !            17: #define        V_SYSCALL 8
        !            18: #define        V_INTR 12
        !            19: #define        V_PDMA 16
        !            20: #define        UPAGES 8
        !            21: #define        CLSIZE 2
        !            22: #define        SYSPTSIZE 1536
        !            23: #define        USRPTSIZE 1024
        !            24: #else
        !            25: asm(".set      U_ARG,120");
        !            26: asm(".set      U_QSAV,140");
        !            27: #endif
        !            28: /*     scb.s   4.9     81/05/13        */
        !            29: 
        !            30: /*
        !            31:  * System control block
        !            32:  */
        !            33:        .set    INTSTK,1        # handle this interrupt on the interrupt stack
        !            34:        .set    HALT,3          # halt if this interrupt occurs
        !            35: 
        !            36: _scb:  .globl  _scb
        !            37: 
        !            38: #define        STRAY   .long   _Xstray+INTSTK
        !            39: #define        STRAY8  STRAY;STRAY;STRAY;STRAY;STRAY;STRAY;STRAY;STRAY
        !            40: #define        STRAY15 STRAY;STRAY;STRAY;STRAY;STRAY;STRAY;STRAY;STRAY8
        !            41: #define        KS(a)   .long   _X/**/a
        !            42: #define        IS(a)   .long   _X/**/a+INTSTK
        !            43: #define        STOP(a) .long   _X/**/a+HALT
        !            44: 
        !            45: /* 000 */      STRAY;          IS(machcheck);  IS(kspnotval);  STOP(powfail);
        !            46: /* 010 */      KS(privinflt);  KS(xfcflt);     KS(resopflt);   KS(resadflt);
        !            47: /* 020 */      KS(protflt);    KS(transflt);   KS(tracep);     KS(bptflt);
        !            48: /* 030 */      KS(compatflt);  KS(arithtrap);  STRAY;          STRAY;
        !            49: /* 040 */      KS(syscall);    KS(chme);       KS(chms);       KS(chmu);
        !            50: /* 050 */      STRAY;          IS(cmrd);       STRAY;          STRAY;
        !            51: /* 060 */      IS(wtime);      STRAY;          STRAY;          STRAY;
        !            52: /* 070 */      STRAY;          STRAY;          STRAY;          STRAY;
        !            53: /* 080 */      STRAY;          STRAY;          KS(astflt);     STRAY;
        !            54: /* 090 */      STRAY;          STRAY;          STRAY;          STRAY;
        !            55: /* 0a0 */      IS(softclock);  STRAY;          STRAY;          STRAY;
        !            56: /* 0b0 */      STRAY;          STRAY;          STRAY;          STRAY;
        !            57: /* 0c0 */      IS(hardclock);  STRAY;          STRAY;          STRAY;
        !            58: /* 0d0 */      STRAY;          STRAY;          STRAY;          STRAY;
        !            59: /* 0e0 */      STRAY;          STRAY;          STRAY;          STRAY;
        !            60: /* 0f0 */      IS(consdin);    IS(consdout);   IS(cnrint);     IS(cnxint);
        !            61: /* 100 */      IS(nexzvec); STRAY15;           /* ipl 0x14, nexus 0-15 */
        !            62: /* 140 */      IS(nexzvec); STRAY15;           /* ipl 0x15, nexus 0-15 */
        !            63: /* 180 */      IS(nexzvec); STRAY15;           /* ipl 0x16, nexus 0-15 */
        !            64: /* 1c0 */      IS(nexzvec); STRAY15;           /* ipl 0x17, nexus 0-15 */
        !            65: 
        !            66:        .globl  _UNIvec
        !            67: _UNIvec:       .space  512             # 750 unibus intr vector
        !            68:                                        # 1st UBA jump table on 780's
        !            69: /*     locore.s        4.55-   82/02/17        */
        !            70: 
        !            71: #include "../h/mtpr.h"
        !            72: #include "../h/trap.h"
        !            73: #include "../h/psl.h"
        !            74: #include "../h/pte.h"
        !            75: #include "../h/cpu.h"
        !            76: #include "../h/nexus.h"
        !            77: #include "../h/ubareg.h"
        !            78: 
        !            79: #include "dz.h"
        !            80: #include "mba.h"
        !            81: 
        !            82:        .set    HIGH,0x1f       # mask for total disable
        !            83:        .set    MCKVEC,4        # offset into scb of machine check vector
        !            84:        .set    NBPG,512
        !            85:        .set    PGSHIFT,9
        !            86: 
        !            87:        .set    NISP,3          # number of interrupt stack pages
        !            88: 
        !            89: /*
        !            90:  * User structure is UPAGES at top of user space.
        !            91:  */
        !            92:        .globl  _u
        !            93:        .set    _u,0x80000000 - UPAGES*NBPG
        !            94: 
        !            95: /*
        !            96:  * Restart parameter block
        !            97:  * This is filled in in machdep.c in startup().
        !            98:  * It MUST be page aligned.
        !            99:  * When auto-restart occurs, we run restart() in machdep.c, which
        !           100:  * takes a core-dump and then cold-starts.
        !           101:  */ 
        !           102:        .globl  _rpb
        !           103: _rpb:
        !           104:        .space  508
        !           105: erpb:
        !           106:        .space  4
        !           107:        .globl  _intstack
        !           108: _intstack:
        !           109:        .space  NISP*NBPG
        !           110: eintstack:
        !           111: 
        !           112: /*
        !           113:  * Do a dump.
        !           114:  * Called by auto-restart.
        !           115:  * May be called manually.
        !           116:  */
        !           117:        .align  2
        !           118:        .globl  _doadump
        !           119: _doadump:
        !           120:        nop; nop                                # .word 0x0101
        !           121: #define        _rpbmap _Sysmap+8                       # scb, UNIvec, rpb, istack*4
        !           122:        bicl2   $PG_PROT,_rpbmap
        !           123:        bisl2   $PG_KW,_rpbmap
        !           124:        tstl    _rpb+RP_FLAG                    # dump only once!
        !           125:        bneq    1f
        !           126:        incl    _rpb+RP_FLAG
        !           127:        mtpr    $0,$TBIA
        !           128:        movl    sp,erpb
        !           129:        movab   erpb,sp
        !           130:        mfpr    $PCBB,-(sp)
        !           131:        mfpr    $MAPEN,-(sp)
        !           132:        mfpr    $IPL,-(sp)
        !           133:        mtpr    $0,$MAPEN
        !           134:        mtpr    $HIGH,$IPL
        !           135:        pushr   $0x3fff
        !           136:        calls   $0,_dumpsys
        !           137: 1:
        !           138:        halt
        !           139: 
        !           140: /*
        !           141:  * Interrupt vector routines
        !           142:  */ 
        !           143:        .globl  _waittime
        !           144: 
        !           145: #define        SCBVEC(name)    .align 2; .globl _X/**/name; _X/**/name
        !           146: #define        PANIC(msg)      clrl _waittime; pushab 1f; \
        !           147:                        calls $1,_panic; 1: .asciz msg
        !           148: #define        PRINTF(n,msg)   pushab 1f; calls $n+1,_printf; MSG(msg)
        !           149: #define        MSG(msg)        .data; 1: .asciz msg; .text
        !           150: #define        PUSHR           pushr $0x3f
        !           151: #define        POPR            popr $0x3f
        !           152: 
        !           153: SCBVEC(machcheck):
        !           154:        PUSHR; pushab 6*4(sp); calls $1,_machinecheck; POPR;
        !           155:        addl2 (sp)+,sp; rei
        !           156: SCBVEC(kspnotval):
        !           157:        PUSHR; PANIC("KSP not valid");
        !           158: SCBVEC(powfail):
        !           159:        halt
        !           160: SCBVEC(chme): SCBVEC(chms): SCBVEC(chmu):
        !           161:        PUSHR; PANIC("CHM? in kernel");
        !           162: SCBVEC(stray):
        !           163:        PUSHR; PRINTF(0, "stray scb interrupt\n"); POPR;
        !           164:        rei
        !           165: SCBVEC(nexzvec):
        !           166:        PUSHR; mfpr $IPL,-(sp); PRINTF(1, "nexus stray intr ipl%x\n"); POPR; rei
        !           167: SCBVEC(cmrd):
        !           168:        PUSHR; calls $0,_memerr; POPR; rei
        !           169: SCBVEC(wtime):
        !           170:        PUSHR; pushl 6*4(sp); PRINTF(1,"write timeout %x\n"); POPR;
        !           171:        PANIC("wtimo");
        !           172: 
        !           173: #if NMBA > 0
        !           174: SCBVEC(mba3int):
        !           175:        PUSHR; pushl $3; brb 1f
        !           176: SCBVEC(mba2int):
        !           177:        PUSHR; pushl $2; brb 1f
        !           178: SCBVEC(mba1int):
        !           179:        PUSHR; pushl $1; brb 1f
        !           180: SCBVEC(mba0int):
        !           181:        PUSHR; pushl $0
        !           182: 1:     calls $1,_mbintr
        !           183:        POPR
        !           184:        incl    _cnt+V_INTR
        !           185:        rei
        !           186: #endif
        !           187: 
        !           188: #if VAX780
        !           189: /*
        !           190:  * Registers for the uba handling code
        !           191:  */
        !           192: #define        rUBANUM r0
        !           193: #define        rUBAHD  r1
        !           194: #define        rUVEC   r3
        !           195: #define        rUBA    r4
        !           196: /* r2,r5 are scratch */
        !           197: 
        !           198: SCBVEC(ua3int):
        !           199:        PUSHR; movl $3,rUBANUM; moval _uba_hd+(3*UH_SIZE),rUBAHD; brb 1f
        !           200: SCBVEC(ua2int):
        !           201:        PUSHR; movl $2,rUBANUM; moval _uba_hd+(2*UH_SIZE),rUBAHD; brb 1f
        !           202: SCBVEC(ua1int):
        !           203:        PUSHR; movl $1,rUBANUM; moval _uba_hd+(1*UH_SIZE),rUBAHD; brb 1f
        !           204: SCBVEC(ua0int):
        !           205:        PUSHR; movl $0,rUBANUM; moval _uba_hd+(0*UH_SIZE),rUBAHD;
        !           206: 1:
        !           207:        incl    _cnt+V_INTR
        !           208:        mfpr    $IPL,r2                         /* r2 = mfpr(IPL); */
        !           209:        movl    UH_UBA(rUBAHD),rUBA             /* uba = uhp->uh_uba; */
        !           210:        movl    UBA_BRRVR-0x14*4(rUBA)[r2],rUVEC
        !           211:                                        /* uvec = uba->uba_brrvr[r2-0x14] */
        !           212: ubanorm:
        !           213:        bleq    ubaerror 
        !           214:        addl2   UH_VEC(rUBAHD),rUVEC            /* uvec += uh->uh_vec */
        !           215:        bicl3   $3,(rUVEC),r1 
        !           216:        jmp     2(r1)                           /* 2 skips ``pushr $0x3f'' */
        !           217: ubaerror:
        !           218:        PUSHR; calls $0,_ubaerror; POPR         /* ubaerror r/w's r0-r5 */
        !           219:        tstl rUVEC; jneq ubanorm                /* rUVEC contains result */
        !           220:        POPR
        !           221:        rei
        !           222: #endif
        !           223: SCBVEC(cnrint):
        !           224:        PUSHR; calls $0,_cnrint; POPR; incl _cnt+V_INTR; rei
        !           225: SCBVEC(cnxint):
        !           226:        PUSHR; calls $0,_cnxint; POPR; incl _cnt+V_INTR; rei
        !           227: SCBVEC(hardclock):
        !           228:        PUSHR
        !           229:        pushl 4+6*4(sp); pushl 4+6*4(sp);
        !           230:        calls $2,_hardclock                     # hardclock(pc,psl)
        !           231:        POPR;
        !           232:        incl    _cnt+V_INTR             ## temp so not to break vmstat -= HZ
        !           233:        rei
        !           234: SCBVEC(softclock):
        !           235:        PUSHR
        !           236:        pushl 4+6*4(sp); pushl 4+6*4(sp);
        !           237:        calls $2,_softclock                     # softclock(pc,psl)
        !           238:        POPR; 
        !           239:        rei
        !           240: #if defined(VAX750) || defined(VAX7ZZ)
        !           241: SCBVEC(consdin):
        !           242:        PUSHR; calls $0,_turintr; POPR; incl _cnt+V_INTR; rei
        !           243: 
        !           244: SCBVEC(consdout):
        !           245:        PUSHR; calls $0,_tuxintr; POPR; incl _cnt+V_INTR; rei
        !           246: #else
        !           247: SCBVEC(consdin):
        !           248:        halt
        !           249: SCBVEC(consdout):
        !           250:        halt
        !           251: #endif
        !           252: 
        !           253: #if NDZ > 0
        !           254: /*
        !           255:  * DZ pseudo dma routine:
        !           256:  *     r0 - controller number
        !           257:  */
        !           258:        .align  1
        !           259:        .globl  _dzdma
        !           260: _dzdma:
        !           261:        mull2   $8*20,r0
        !           262:        movab   _dzpdma(r0),r3          # pdma structure base
        !           263:                                        # for this controller
        !           264: dzploop:
        !           265:        movl    r3,r0   
        !           266:        movl    (r0)+,r1                # device register address
        !           267:        movzbl  1(r1),r2                # get line number
        !           268:        bitb    $0x80,r2                # TRDY on?
        !           269:        beql    dzprei                  # no    
        !           270:        bicb2   $0xf8,r2                # clear garbage bits
        !           271:        mull2   $20,r2
        !           272:        addl2   r2,r0                   # point at line's pdma structure
        !           273:        movl    (r0)+,r2                # p_mem
        !           274:        cmpl    r2,(r0)+                # p_mem < p_end ?
        !           275:        bgequ   dzpcall                 # no, go call dzxint
        !           276:        movb    (r2)+,6(r1)             # dztbuf = *p_mem++
        !           277:        movl    r2,-8(r0)
        !           278:        brb     dzploop                 # check for another line
        !           279: dzprei:
        !           280:        POPR
        !           281:        incl    _cnt+V_PDMA
        !           282:        rei
        !           283: 
        !           284: dzpcall:
        !           285:        pushl   r3
        !           286:        pushl   (r0)+                   # push tty address
        !           287:        calls   $1,*(r0)                # call interrupt rtn
        !           288:        movl    (sp)+,r3
        !           289:        brb     dzploop                 # check for another line
        !           290: #endif
        !           291: 
        !           292: /*
        !           293:  * Stray UNIBUS interrupt catch routines
        !           294:  */
        !           295:        .data
        !           296:        .align  2
        !           297: #define        PJ      PUSHR;jsb _Xustray
        !           298:        .globl  _catcher
        !           299: _catcher:
        !           300:        PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ
        !           301:        PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ
        !           302:        PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ
        !           303:        PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ
        !           304:        PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ
        !           305:        PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ
        !           306:        PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ
        !           307:        PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ;PJ
        !           308: 
        !           309:        .globl  _cold
        !           310: _cold: .long   1
        !           311:        .data
        !           312: 
        !           313:        .text
        !           314: SCBVEC(ustray):
        !           315:        blbc    _cold,1f
        !           316:        mfpr    $IPL,r11
        !           317:        subl3   $_catcher+8,(sp)+,r10
        !           318:        ashl    $-1,r10,r10
        !           319:        POPR
        !           320:        rei
        !           321: 1:
        !           322:        subl3   $_catcher+8,(sp)+,r0
        !           323:        ashl    $-1,r0,-(sp)
        !           324:        mfpr    $IPL,-(sp)
        !           325:        PRINTF(2, "uba?: stray intr ipl %x vec %o\n")
        !           326:        POPR
        !           327:        rei
        !           328: 
        !           329: /*
        !           330:  * Trap and fault vector routines
        !           331:  */ 
        !           332: #define        TRAP(a) pushl $a; brw alltraps
        !           333: 
        !           334: /*
        !           335:  * Ast delivery (profiling and/or reschedule)
        !           336:  */
        !           337: SCBVEC(astflt):
        !           338:        pushl $0; TRAP(ASTFLT)
        !           339: SCBVEC(privinflt):
        !           340:        pushl $0; TRAP(PRIVINFLT)
        !           341: SCBVEC(xfcflt):
        !           342:        pushl $0; TRAP(XFCFLT)
        !           343: SCBVEC(resopflt):
        !           344:        pushl $0; TRAP(RESOPFLT)
        !           345: SCBVEC(resadflt):
        !           346:        pushl $0; TRAP(RESADFLT)
        !           347: SCBVEC(bptflt):
        !           348:        pushl $0; TRAP(BPTFLT)
        !           349: SCBVEC(compatflt):
        !           350:        TRAP(COMPATFLT);
        !           351: SCBVEC(tracep):
        !           352:        pushl $0; TRAP(TRCTRAP)
        !           353: SCBVEC(arithtrap):
        !           354:        TRAP(ARITHTRAP)
        !           355: SCBVEC(protflt):
        !           356:        blbs    (sp)+,segflt
        !           357:        TRAP(PROTFLT)
        !           358: segflt:
        !           359:        TRAP(SEGFLT)
        !           360: SCBVEC(transflt):
        !           361:        bitl    $1,(sp)+
        !           362:        bnequ   tableflt
        !           363:        TRAP(PAGEFLT)
        !           364: tableflt: 
        !           365:        TRAP(TABLEFLT)
        !           366: 
        !           367: alltraps:
        !           368:        mfpr    $USP,-(sp); calls $0,_trap; mtpr (sp)+,$USP
        !           369:        incl    _cnt+V_TRAP
        !           370:        addl2   $8,sp                   # pop type, code
        !           371:        mtpr    $HIGH,$IPL              ## dont go to a higher IPL (GROT)
        !           372:        rei
        !           373: 
        !           374: SCBVEC(syscall):
        !           375:        pushl   $SYSCALL
        !           376:        mfpr    $USP,-(sp); calls $0,_syscall; mtpr (sp)+,$USP
        !           377:        incl    _cnt+V_SYSCALL
        !           378:        addl2   $8,sp                   # pop type, code
        !           379:        mtpr    $HIGH,$IPL              ## dont go to a higher IPL (GROT)
        !           380:        rei
        !           381: 
        !           382: /*
        !           383:  * System page table
        !           384:  */ 
        !           385: #define        vaddr(x)        ((((x)-_Sysmap)/4)*NBPG+0x80000000)
        !           386: #define        SYSMAP(mname, vname, npte)                      \
        !           387: _/**/mname:    .globl  _/**/mname;             \
        !           388:        .space  npte*4;                         \
        !           389:        .globl  _/**/vname;                     \
        !           390:        .set    _/**/vname,vaddr(_/**/mname)
        !           391: 
        !           392:        .data
        !           393:        .align  2
        !           394:        SYSMAP(Sysmap   ,Sysbase        ,SYSPTSIZE      )
        !           395:        SYSMAP(UMBAbeg  ,umbabeg        ,0              )
        !           396:        SYSMAP(Nexmap   ,nexus          ,16*MAXNNEXUS   )
        !           397:        SYSMAP(UMEMmap  ,umem           ,16*MAXNUBA     )
        !           398:        SYSMAP(UMBAend  ,umbaend        ,0              )
        !           399:        SYSMAP(Usrptmap ,usrpt          ,USRPTSIZE      )
        !           400:        SYSMAP(Forkmap  ,forkutl        ,UPAGES         )
        !           401:        SYSMAP(Xswapmap ,xswaputl       ,UPAGES         )
        !           402:        SYSMAP(Xswap2map,xswap2utl      ,UPAGES         )
        !           403:        SYSMAP(Swapmap  ,swaputl        ,UPAGES         )
        !           404:        SYSMAP(Pushmap  ,pushutl        ,UPAGES         )
        !           405:        SYSMAP(Vfmap    ,vfutl          ,UPAGES         )
        !           406:        SYSMAP(CMAP1    ,CADDR1         ,1              )
        !           407:        SYSMAP(CMAP2    ,CADDR2         ,1              )
        !           408:        SYSMAP(mcrmap   ,mcr            ,1              )
        !           409:        SYSMAP(mmap     ,vmmap          ,1              )
        !           410:        SYSMAP(msgbufmap,msgbuf         ,CLSIZE         )
        !           411:        SYSMAP(camap    ,cabase         ,16*CLSIZE      )
        !           412:        SYSMAP(ecamap   ,calimit        ,0              )
        !           413: #ifdef BBNNET
        !           414:        SYSMAP(Netmap   ,netutl         ,NNETPAGES*CLSIZE)
        !           415: #endif
        !           416: 
        !           417: eSysmap:
        !           418:        .globl  _Syssize
        !           419:        .set    _Syssize,(eSysmap-_Sysmap)/4
        !           420:        .text
        !           421: 
        !           422: /*
        !           423:  * Initialization
        !           424:  *
        !           425:  * ipl 0x1f; mapen 0; scbb, pcbb, sbr, slr, isp, ksp not set
        !           426:  */
        !           427:        .data
        !           428:        .globl  _cpu
        !           429: _cpu:  .long   0
        !           430:        .text
        !           431:        .globl  start
        !           432: start:
        !           433:        .word   0
        !           434: /* set system control block base and system page table params */
        !           435:        mtpr    $_scb-0x80000000,$SCBB
        !           436:        mtpr    $_Sysmap-0x80000000,$SBR
        !           437:        mtpr    $_Syssize,$SLR
        !           438: /* double map the kernel into the virtual user addresses of phys mem */
        !           439:        mtpr    $_Sysmap,$P0BR
        !           440:        mtpr    $_Syssize,$P0LR
        !           441: /* set ISP and get cpu type */
        !           442:        movl    $_intstack+NISP*NBPG,sp
        !           443:        mfpr    $SID,r0
        !           444:        movab   _cpu,r1
        !           445:        extzv   $24,$8,r0,(r1)
        !           446: /* init RPB */
        !           447:        movab   _rpb,r0
        !           448:        movl    r0,(r0)+                        # rp_selfref
        !           449:        movab   _doadump,r1
        !           450:        movl    r1,(r0)+                        # rp_dumprout
        !           451:        movl    $0x1f,r2
        !           452:        clrl    r3
        !           453: 1:     addl2   (r1)+,r3; sobgtr r2,1b
        !           454:        movl    r3,(r0)+                        # rp_chksum
        !           455: /* count up memory */
        !           456:        clrl    r7
        !           457: 1:     pushl   $4; pushl r7; calls $2,_badaddr; tstl r0; bneq 9f
        !           458:        acbl    $8096*1024-1,$64*1024,r7,1b
        !           459: 9:
        !           460: /* clear memory from kernel bss and pages for proc 0 u. and page table */
        !           461:        movab   _edata,r6
        !           462:        movab   _end,r5
        !           463:        bbcc    $31,r5,0f; 0:
        !           464:        addl2   $(UPAGES*NBPG)+NBPG+NBPG,r5
        !           465: 1:     clrq    (r6); acbl r5,$8,r6,1b
        !           466: /* trap() and syscall() save r0-r11 in the entry mask (per ../h/reg.h) */
        !           467:        bisw2   $0x0fff,_trap
        !           468:        bisw2   $0x0fff,_syscall
        !           469:        calls   $0,_fixctlrmask
        !           470: /* initialize system page table: scb and int stack writeable */
        !           471:        clrl    r2
        !           472:        movab   eintstack,r1; bbcc $31,r1,0f; 0: ashl $-PGSHIFT,r1,r1
        !           473: 1:     bisl3   $PG_V|PG_KW,r2,_Sysmap[r2]; aoblss r1,r2,1b
        !           474: /* make rpb read-only as red zone for interrupt stack */
        !           475:        bicl2   $PG_PROT,_rpbmap
        !           476:        bisl2   $PG_KR,_rpbmap
        !           477: /* make kernel text space read-only */
        !           478:        movab   _etext+NBPG-1,r1; bbcc $31,r1,0f; 0: ashl $-PGSHIFT,r1,r1
        !           479: 1:     bisl3   $PG_V|PG_KR,r2,_Sysmap[r2]; aoblss r1,r2,1b
        !           480: /* make kernel data, bss, read-write */
        !           481:        movab   _end+NBPG-1,r1; bbcc $31,r1,0f; 0:; ashl $-PGSHIFT,r1,r1
        !           482: 1:     bisl3   $PG_V|PG_KW,r2,_Sysmap[r2]; aoblss r1,r2,1b
        !           483: /* now go to mapped mode */
        !           484:        mtpr    $1,$TBIA; mtpr $1,$MAPEN; jmp *$0f; 0:
        !           485: /* init mem sizes */
        !           486:        ashl    $-PGSHIFT,r7,_maxmem
        !           487:        movl    _maxmem,_physmem
        !           488:        movl    _maxmem,_freemem
        !           489: /* setup context for proc[0] == Scheduler */
        !           490:        movab   _end+NBPG-1,r6
        !           491:        bicl2   $NBPG-1,r6              # make page boundary
        !           492: /* setup page table for proc[0] */
        !           493:        bbcc    $31,r6,0f; 0:
        !           494:        ashl    $-PGSHIFT,r6,r3                 # r3 = btoc(r6)
        !           495:        bisl3   $PG_V|PG_KW,r3,_Usrptmap        # init first upt entry
        !           496:        incl    r3
        !           497:        movab   _usrpt,r0
        !           498:        mtpr    r0,$TBIS
        !           499: /* init p0br, p0lr */
        !           500:        mtpr    r0,$P0BR
        !           501:        mtpr    $0,$P0LR
        !           502: /* init p1br, p1lr */
        !           503:        movab   NBPG(r0),r0
        !           504:        movl    $0x200000-UPAGES,r1
        !           505:        mtpr    r1,$P1LR
        !           506:        mnegl   r1,r1
        !           507:        moval   -4*UPAGES(r0)[r1],r2
        !           508:        mtpr    r2,$P1BR
        !           509: /* setup mapping for UPAGES of _u */
        !           510:        movl    $UPAGES,r2; movab _u+NBPG*UPAGES,r1; addl2 $UPAGES,r3; jbr 2f
        !           511: 1:     decl    r3
        !           512:        moval   -NBPG(r1),r1;
        !           513:        bisl3   $PG_V|PG_URKW,r3,-(r0)
        !           514:        mtpr    r1,$TBIS
        !           515: 2:     sobgeq  r2,1b
        !           516: /* initialize (slightly) the pcb */
        !           517:        movab   UPAGES*NBPG(r1),PCB_KSP(r1)
        !           518:        mnegl   $1,PCB_ESP(r1)
        !           519:        mnegl   $1,PCB_SSP(r1)
        !           520:        movl    r1,PCB_USP(r1)
        !           521:        mfpr    $P0BR,PCB_P0BR(r1)
        !           522:        mfpr    $P0LR,PCB_P0LR(r1)
        !           523:        movb    $4,PCB_P0LR+3(r1)               # disable ast
        !           524:        mfpr    $P1BR,PCB_P1BR(r1)
        !           525:        mfpr    $P1LR,PCB_P1LR(r1)
        !           526:        movl    $CLSIZE,PCB_SZPT(r1)            # init u.u_pcb.pcb_szpt
        !           527:        movl    r11,PCB_R11(r1)
        !           528:        movab   1f,PCB_PC(r1)                   # initial pc
        !           529:        clrl    PCB_PSL(r1)                     # mode(k,k), ipl=0
        !           530:        ashl    $PGSHIFT,r3,r3
        !           531:        mtpr    r3,$PCBB                        # first pcbb
        !           532: /* set regs, p0br, p0lr, p1br, p1lr, astlvl, ksp and change to kernel mode */
        !           533:        ldpctx
        !           534:        rei
        !           535: /* put signal trampoline code in u. area */
        !           536: 1:     movab   _u,r0
        !           537:        movc3   $12,sigcode,PCB_SIGC(r0)
        !           538: /* save reboot flags in global _boothowto */
        !           539:        movl    r11,_boothowto
        !           540: /* calculate firstaddr, and call main() */
        !           541:        movab   _end+NBPG-1,r0; bbcc $31,r0,0f; 0:; ashl $-PGSHIFT,r0,-(sp)
        !           542:        addl2   $UPAGES+1,(sp); calls $1,_main
        !           543: /* proc[1] == /etc/init now running here; run icode */
        !           544:        pushl   $PSL_CURMOD|PSL_PRVMOD; pushl $0; rei
        !           545: 
        !           546: /* signal trampoline code: it is known that this code takes exactly 12 bytes */
        !           547: /* in ../h/pcb.h and in the movc3 above */
        !           548: sigcode:
        !           549:        calls   $3,1(pc)
        !           550:        rei
        !           551:        .word   0x7f                            # registers 0-6 (6==sp/compat)
        !           552:        callg   (ap),*12(ap)
        !           553:        ret
        !           554: 
        !           555: /*
        !           556:  * Primitives
        !           557:  */ 
        !           558: 
        !           559: /*
        !           560:  * badaddr(addr, len)
        !           561:  *     see if access addr with a len type instruction causes a machine check
        !           562:  *     len is length of access (1=byte, 2=short, 4=long)
        !           563:  */
        !           564:        .globl  _badaddr
        !           565: _badaddr:
        !           566:        .word   0
        !           567:        movl    $1,r0
        !           568:        mfpr    $IPL,r1
        !           569:        mtpr    $HIGH,$IPL
        !           570:        movl    _scb+MCKVEC,r2
        !           571:        movl    4(ap),r3
        !           572:        movl    8(ap),r4
        !           573:        movab   9f+INTSTK,_scb+MCKVEC
        !           574:        bbc     $0,r4,1f; tstb  (r3)
        !           575: 1:     bbc     $1,r4,1f; tstw  (r3)
        !           576: 1:     bbc     $2,r4,1f; tstl  (r3)
        !           577: 1:     clrl    r0                      # made it w/o machine checks
        !           578: 2:     movl    r2,_scb+MCKVEC
        !           579:        mtpr    r1,$IPL
        !           580:        ret
        !           581:        .align  2
        !           582: 9:
        !           583:        casel   _cpu,$1,$VAX_MAX
        !           584: 0:
        !           585:        .word   8f-0b           # 1 is 780
        !           586:        .word   5f-0b           # 2 is 750
        !           587:        .word   5f-0b           # 3 is 7ZZ
        !           588: 5:
        !           589: #if defined(VAX750) || defined(VAX7ZZ)
        !           590:        mtpr    $0xf,$MCESR
        !           591: #endif
        !           592:        brb     1f
        !           593: 8:
        !           594: #if VAX780
        !           595:        mtpr    $0,$SBIFS
        !           596: #endif
        !           597: 1:
        !           598:        addl2   (sp)+,sp                # discard mchchk trash
        !           599:        movab   2b,(sp)
        !           600:        rei
        !           601: 
        !           602: _addupc:       .globl  _addupc
        !           603:        .word   0x0
        !           604:        movl    8(ap),r2                # &u.u_prof
        !           605:        subl3   8(r2),4(ap),r0          # corrected pc
        !           606:        blss    9f
        !           607:        extzv   $1,$31,r0,r0            # logical right shift
        !           608:        extzv   $1,$31,12(r2),r1        # ditto for scale
        !           609:        emul    r1,r0,$0,r0
        !           610:        ashq    $-14,r0,r0
        !           611:        tstl    r1
        !           612:        bneq    9f
        !           613:        incl    r0
        !           614:        bicl2   $1,r0
        !           615:        cmpl    r0,4(r2)                # length
        !           616:        bgequ   9f
        !           617:        addl2   (r2),r0                 # base
        !           618:        probew  $3,$2,(r0)
        !           619:        beql    8f
        !           620:        addw2   12(ap),(r0)
        !           621: 9:
        !           622:        ret
        !           623: 8:
        !           624:        clrl    12(r2)
        !           625:        ret
        !           626: 
        !           627: _Copyin:       .globl  _Copyin         # <<<massaged for jsb by asm.sed>>>
        !           628:        movl    12(sp),r0               # copy length
        !           629:        blss    ersb
        !           630:        movl    4(sp),r1                # copy user address
        !           631:        cmpl    $NBPG,r0                # probing one page or less ?
        !           632:        bgeq    cishort                 # yes
        !           633: ciloop:
        !           634:        prober  $3,$NBPG,(r1)           # bytes accessible ?
        !           635:        beql    ersb                    # no
        !           636:        addl2   $NBPG,r1                # incr user address ptr
        !           637:        acbl    $NBPG+1,$-NBPG,r0,ciloop        # reduce count and loop
        !           638: cishort:
        !           639:        prober  $3,r0,(r1)              # bytes accessible ?
        !           640:        beql    ersb                    # no
        !           641:        movc3   12(sp),*4(sp),*8(sp)
        !           642:        clrl    r0
        !           643:        rsb
        !           644: 
        !           645: ersb:
        !           646:        mnegl   $1,r0
        !           647:        rsb
        !           648: 
        !           649: _Copyout:      .globl  _Copyout        # <<<massaged for jsb by asm.sed >>>
        !           650:        movl    12(sp),r0               # get count
        !           651:        blss    ersb
        !           652:        movl    8(sp),r1                # get user address
        !           653:        cmpl    $NBPG,r0                # can do in one probew?
        !           654:        bgeq    coshort                 # yes
        !           655: coloop:
        !           656:        probew  $3,$NBPG,(r1)           # bytes accessible?
        !           657:        beql    ersb                    # no 
        !           658:        addl2   $NBPG,r1                # increment user address
        !           659:        acbl    $NBPG+1,$-NBPG,r0,coloop        # reduce count and loop
        !           660: coshort:
        !           661:        probew  $3,r0,(r1)              # bytes accessible?
        !           662:        beql    ersb                    # no
        !           663:        movc3   12(sp),*4(sp),*8(sp)
        !           664:        clrl    r0
        !           665:        rsb
        !           666: 
        !           667: /*
        !           668:  * non-local goto's
        !           669:  */
        !           670:        .globl  _Setjmp
        !           671: _Setjmp:
        !           672:        movq    r6,(r0)+
        !           673:        movq    r8,(r0)+
        !           674:        movq    r10,(r0)+
        !           675:        movq    r12,(r0)+
        !           676:        addl3   $4,sp,(r0)+
        !           677:        movl    (sp),(r0)
        !           678:        clrl    r0
        !           679:        rsb
        !           680: 
        !           681:        .globl  _Longjmp
        !           682: _Longjmp:
        !           683:        movq    (r0)+,r6
        !           684:        movq    (r0)+,r8
        !           685:        movq    (r0)+,r10
        !           686:        movq    (r0)+,r12
        !           687:        movl    (r0)+,r1
        !           688:        cmpl    r1,sp                           # must be a pop
        !           689:        bgequ   lj2
        !           690:        pushab  lj1
        !           691:        calls   $1,_panic
        !           692: lj2:
        !           693:        movl    r1,sp
        !           694:        jmp     *(r0)                           # ``rsb''
        !           695: 
        !           696: lj1:   .asciz  "longjmp"
        !           697: 
        !           698:        .globl  _whichqs
        !           699:        .globl  _qs
        !           700:        .globl  _cnt
        !           701: 
        !           702:        .globl  _noproc
        !           703:        .comm   _noproc,4
        !           704:        .globl  _runrun
        !           705:        .comm   _runrun,4
        !           706: 
        !           707: /*
        !           708:  * The following primitives use the fancy VAX instructions
        !           709:  * much like VMS does.  _whichqs tells which of the 32 queues _qs
        !           710:  * have processes in them.  Setrq puts processes into queues, Remrq
        !           711:  * removes them from queues.  The running process is on no queue,
        !           712:  * other processes are on a queue related to p->p_pri, divided by 4
        !           713:  * actually to shrink the 0-127 range of priorities into the 32 available
        !           714:  * queues.
        !           715:  */
        !           716: 
        !           717: /*
        !           718:  * Setrq(p), using fancy VAX instructions.
        !           719:  *
        !           720:  * Call should be made at spl6(), and p->p_stat should be SRUN
        !           721:  */
        !           722:        .globl  _Setrq          # <<<massaged to jsb by "asm.sed">>>
        !           723: _Setrq:
        !           724:        tstl    P_RLINK(r0)             ## firewall: p->p_rlink must be 0
        !           725:        beql    set1                    ##
        !           726:        pushab  set3                    ##
        !           727:        calls   $1,_panic               ##
        !           728: set1:
        !           729:        movzbl  P_PRI(r0),r1            # put on queue which is p->p_pri / 4
        !           730:        ashl    $-2,r1,r1
        !           731:        movaq   _qs[r1],r2
        !           732:        insque  (r0),*4(r2)             # at end of queue
        !           733:        bbss    r1,_whichqs,set2        # mark queue non-empty
        !           734: set2:
        !           735:        rsb
        !           736: 
        !           737: set3:  .asciz  "setrq"
        !           738: 
        !           739: /*
        !           740:  * Remrq(p), using fancy VAX instructions
        !           741:  *
        !           742:  * Call should be made at spl6().
        !           743:  */
        !           744:        .globl  _Remrq          # <<<massaged to jsb by "asm.sed">>>
        !           745: _Remrq:
        !           746:        movzbl  P_PRI(r0),r1
        !           747:        ashl    $-2,r1,r1
        !           748:        bbsc    r1,_whichqs,rem1
        !           749:        pushab  rem3                    # it wasn't recorded to be on its q
        !           750:        calls   $1,_panic
        !           751: rem1:
        !           752:        remque  (r0),r2
        !           753:        beql    rem2
        !           754:        bbss    r1,_whichqs,rem2
        !           755: rem2:
        !           756:        clrl    P_RLINK(r0)             ## for firewall checking
        !           757:        rsb
        !           758: 
        !           759: rem3:  .asciz  "remrq"
        !           760: 
        !           761: /*
        !           762:  * Masterpaddr is the p->p_addr of the running process on the master
        !           763:  * processor.  When a multiprocessor system, the slave processors will have
        !           764:  * an array of slavepaddr's.
        !           765:  */
        !           766:        .globl  _masterpaddr
        !           767:        .data
        !           768: _masterpaddr:
        !           769:        .long   0
        !           770: 
        !           771:        .text
        !           772: sw0:   .asciz  "swtch"
        !           773: /*
        !           774:  * Swtch(), using fancy VAX instructions
        !           775:  */
        !           776:        .globl  _Swtch
        !           777: _Swtch:                                # <<<massaged to jsb by "asm.sed">>>
        !           778:        movl    $1,_noproc
        !           779:        clrl    _runrun
        !           780: sw1:   ffs     $0,$32,_whichqs,r0      # look for non-empty queue
        !           781:        bneq    sw1a
        !           782:        mtpr    $0,$IPL                 # must allow interrupts here
        !           783:        brw     sw1                     # this is an idle loop!
        !           784: sw1a:  mtpr    $0x18,$IPL              # lock out all so _whichqs==_qs
        !           785:        bbcc    r0,_whichqs,sw1         # proc moved via lbolt interrupt
        !           786:        movaq   _qs[r0],r1
        !           787:        remque  *(r1),r2                # r2 = p = highest pri process
        !           788:        bvc     sw2                     # make sure something was there
        !           789: sw1b:  pushab  sw0
        !           790:        calls   $1,_panic
        !           791: sw2:   beql    sw3
        !           792:        insv    $1,r0,$1,_whichqs       # still more procs in this queue
        !           793: sw3:
        !           794:        clrl    _noproc
        !           795:        tstl    P_WCHAN(r2)             ## firewalls
        !           796:        bneq    sw1b                    ##
        !           797:        movzbl  P_STAT(r2),r3           ##
        !           798:        cmpl    $SRUN,r3                ##
        !           799:        bneq    sw1b                    ##
        !           800:        clrl    P_RLINK(r2)             ##
        !           801:        movl    *P_ADDR(r2),r0
        !           802:        movl    r0,_masterpaddr
        !           803:        ashl    $PGSHIFT,r0,r0          # r0 = pcbb(p)
        !           804: /*     mfpr    $PCBB,r1                # resume of current proc is easy
        !           805:  *     cmpl    r0,r1
        !           806:  */    beql    res0
        !           807:        incl    _cnt+V_SWTCH
        !           808: /* fall into... */
        !           809: 
        !           810: /*
        !           811:  * Resume(pf)
        !           812:  */
        !           813:        .globl  _Resume         # <<<massaged to jsb by "asm.sed">>>
        !           814: _Resume:
        !           815:        mtpr    $0x18,$IPL                      # no interrupts, please
        !           816:        movl    _CMAP2,_u+PCB_CMAP2     # yech
        !           817:        svpctx
        !           818:        mtpr    r0,$PCBB
        !           819:        ldpctx
        !           820:        movl    _u+PCB_CMAP2,_CMAP2     # yech
        !           821:        mtpr    $_CADDR2,$TBIS
        !           822: res0:
        !           823:        tstl    _u+PCB_SSWAP
        !           824:        beql    res1
        !           825:        movl    _u+PCB_SSWAP,r0
        !           826:        clrl    _u+PCB_SSWAP
        !           827:        movab   _Longjmp,(sp)
        !           828:        movl    $PSL_PRVMOD,4(sp)               # ``cheating'' (jfr)
        !           829: res1:
        !           830:        rei
        !           831: 
        !           832: /*
        !           833:  * {fu,su},{byte,word}, all massaged by asm.sed to jsb's
        !           834:  */
        !           835:        .globl  _Fuword
        !           836: _Fuword:
        !           837:        prober  $3,$4,(r0)
        !           838:        beql    fserr
        !           839:        movl    (r0),r0
        !           840:        rsb
        !           841: fserr:
        !           842:        mnegl   $1,r0
        !           843:        rsb
        !           844: 
        !           845:        .globl  _Fubyte
        !           846: _Fubyte:
        !           847:        prober  $3,$1,(r0)
        !           848:        beql    fserr
        !           849:        movzbl  (r0),r0
        !           850:        rsb
        !           851: 
        !           852:        .globl  _Suword
        !           853: _Suword:
        !           854:        probew  $3,$4,(r0)
        !           855:        beql    fserr
        !           856:        movl    r1,(r0)
        !           857:        clrl    r0
        !           858:        rsb
        !           859: 
        !           860:        .globl  _Subyte
        !           861: _Subyte:
        !           862:        probew  $3,$1,(r0)
        !           863:        beql    fserr
        !           864:        movb    r1,(r0)
        !           865:        clrl    r0
        !           866:        rsb
        !           867: 
        !           868: /*
        !           869:  * Copy 1 relocation unit (NBPG bytes)
        !           870:  * from user virtual address to physical address
        !           871:  */
        !           872: _copyseg:      .globl  _copyseg
        !           873:        .word   0x0
        !           874:        bisl3   $PG_V|PG_KW,8(ap),_CMAP2
        !           875:        mtpr    $_CADDR2,$TBIS  # invalidate entry for copy 
        !           876:        movc3   $NBPG,*4(ap),_CADDR2
        !           877:        ret
        !           878: 
        !           879: /*
        !           880:  * zero out physical memory
        !           881:  * specified in relocation units (NBPG bytes)
        !           882:  */
        !           883: _clearseg:     .globl  _clearseg
        !           884:        .word   0x0
        !           885:        bisl3   $PG_V|PG_KW,4(ap),_CMAP1
        !           886:        mtpr    $_CADDR1,$TBIS
        !           887:        movc5   $0,(sp),$0,$NBPG,_CADDR1
        !           888:        ret
        !           889: 
        !           890: /*
        !           891:  * Check address.
        !           892:  * Given virtual address, byte count, and rw flag
        !           893:  * returns 0 on no access.
        !           894:  */
        !           895: _useracc:      .globl  _useracc
        !           896:        .word   0x0
        !           897:        movl    4(ap),r0                # get va
        !           898:        movl    8(ap),r1                # count
        !           899:        tstl    12(ap)                  # test for read access ?
        !           900:        bneq    userar                  # yes
        !           901:        cmpl    $NBPG,r1                        # can we do it in one probe ?
        !           902:        bgeq    uaw2                    # yes
        !           903: uaw1:
        !           904:        probew  $3,$NBPG,(r0)
        !           905:        beql    uaerr                   # no access
        !           906:        addl2   $NBPG,r0
        !           907:        acbl    $NBPG+1,$-NBPG,r1,uaw1
        !           908: uaw2:
        !           909:        probew  $3,r1,(r0)
        !           910:        beql    uaerr
        !           911:        movl    $1,r0
        !           912:        ret
        !           913: 
        !           914: userar:
        !           915:        cmpl    $NBPG,r1
        !           916:        bgeq    uar2
        !           917: uar1:
        !           918:        prober  $3,$NBPG,(r0)
        !           919:        beql    uaerr
        !           920:        addl2   $NBPG,r0
        !           921:        acbl    $NBPG+1,$-NBPG,r1,uar1
        !           922: uar2:
        !           923:        prober  $3,r1,(r0)
        !           924:        beql    uaerr
        !           925:        movl    $1,r0
        !           926:        ret
        !           927: uaerr:
        !           928:        clrl    r0
        !           929:        ret
        !           930: 
        !           931: /*
        !           932:  * kernacc - check for kernel access privileges
        !           933:  *
        !           934:  * We can't use the probe instruction directly because
        !           935:  * it ors together current and previous mode.
        !           936:  */
        !           937:        .globl  _kernacc
        !           938: _kernacc:
        !           939:        .word   0x0
        !           940:        movl    4(ap),r0        # virtual address
        !           941:        bbcc    $31,r0,kacc1
        !           942:        bbs     $30,r0,kacerr
        !           943:        mfpr    $SBR,r2         # address and length of page table (system)
        !           944:        bbss    $31,r2,0f; 0:
        !           945:        mfpr    $SLR,r3
        !           946:        brb     kacc2
        !           947: kacc1:
        !           948:        bbsc    $30,r0,kacc3
        !           949:        mfpr    $P0BR,r2        # user P0
        !           950:        mfpr    $P0LR,r3
        !           951:        brb     kacc2
        !           952: kacc3:
        !           953:        mfpr    $P1BR,r2        # user P1 (stack)
        !           954:        mfpr    $P1LR,r3
        !           955: kacc2:
        !           956:        addl3   8(ap),r0,r1     # ending virtual address
        !           957:        addl2   $NBPG-1,r1
        !           958:        ashl    $-PGSHIFT,r0,r0
        !           959:        ashl    $-PGSHIFT,r1,r1
        !           960:        bbs     $31,4(ap),kacc6
        !           961:        bbc     $30,4(ap),kacc6
        !           962:        cmpl    r0,r3           # user stack
        !           963:        blss    kacerr          # address too low
        !           964:        brb     kacc4
        !           965: kacc6:
        !           966:        cmpl    r1,r3           # compare last page to P0LR or SLR
        !           967:        bgtr    kacerr          # address too high
        !           968: kacc4: 
        !           969:        movl    (r2)[r0],r3
        !           970:        bbc     $31,4(ap),kacc4a
        !           971:        bbc     $31,r3,kacerr   # valid bit is off
        !           972: kacc4a:
        !           973:        cmpzv   $27,$4,r3,$1    # check protection code
        !           974:        bleq    kacerr          # no access allowed
        !           975:        tstb    12(ap)
        !           976:        bneq    kacc5           # only check read access
        !           977:        cmpzv   $27,$2,r3,$3    # check low 2 bits of prot code
        !           978:        beql    kacerr          # no write access
        !           979: kacc5:
        !           980:        aoblss  r1,r0,kacc4     # next page
        !           981:        movl    $1,r0           # no errors
        !           982:        ret
        !           983: kacerr:
        !           984:        clrl    r0              # error
        !           985:        ret
        !           986:        .globl  _Xrkintr0
        !           987:        .align  2
        !           988: _Xrkintr0:
        !           989:        pushr   $0x3f
        !           990:        pushl   $0
        !           991:        calls   $1,_rkintr
        !           992:        popr    $0x3f
        !           993:        rei
        !           994: 
        !           995:        .globl  _Xlpintr0
        !           996:        .align  2
        !           997: _Xlpintr0:
        !           998:        pushr   $0x3f
        !           999:        pushl   $0
        !          1000:        calls   $1,_lpintr
        !          1001:        popr    $0x3f
        !          1002:        rei
        !          1003: 
        !          1004:        .globl  _Xtmintr0
        !          1005:        .align  2
        !          1006: _Xtmintr0:
        !          1007:        pushr   $0x3f
        !          1008:        pushl   $0
        !          1009:        calls   $1,_tmintr
        !          1010:        popr    $0x3f
        !          1011:        rei
        !          1012: 
        !          1013:        .globl  _Xupintr0
        !          1014:        .align  2
        !          1015: _Xupintr0:
        !          1016:        pushr   $0x3f
        !          1017:        pushl   $0
        !          1018:        calls   $1,_upintr
        !          1019:        popr    $0x3f
        !          1020:        rei
        !          1021: 
        !          1022:        .globl  _Xudintr0
        !          1023:        .align  2
        !          1024: _Xudintr0:
        !          1025:        pushr   $0x3f
        !          1026:        pushl   $0
        !          1027:        calls   $1,_udintr
        !          1028:        popr    $0x3f
        !          1029:        rei
        !          1030: 
        !          1031:        .globl  _Xdnintr0
        !          1032:        .align  2
        !          1033: _Xdnintr0:
        !          1034:        pushr   $0x3f
        !          1035:        pushl   $0
        !          1036:        calls   $1,_dnintr
        !          1037:        popr    $0x3f
        !          1038:        rei
        !          1039: 
        !          1040:        .globl  _Xdhrint0
        !          1041:        .align  2
        !          1042: _Xdhrint0:
        !          1043:        pushr   $0x3f
        !          1044:        pushl   $0
        !          1045:        calls   $1,_dhrint
        !          1046:        popr    $0x3f
        !          1047:        rei
        !          1048: 
        !          1049:        .globl  _Xdhxint0
        !          1050:        .align  2
        !          1051: _Xdhxint0:
        !          1052:        pushr   $0x3f
        !          1053:        pushl   $0
        !          1054:        calls   $1,_dhxint
        !          1055:        popr    $0x3f
        !          1056:        rei
        !          1057: 
        !          1058:        .globl  _Xdhrint1
        !          1059:        .align  2
        !          1060: _Xdhrint1:
        !          1061:        pushr   $0x3f
        !          1062:        pushl   $1
        !          1063:        calls   $1,_dhrint
        !          1064:        popr    $0x3f
        !          1065:        rei
        !          1066: 
        !          1067:        .globl  _Xdhxint1
        !          1068:        .align  2
        !          1069: _Xdhxint1:
        !          1070:        pushr   $0x3f
        !          1071:        pushl   $1
        !          1072:        calls   $1,_dhxint
        !          1073:        popr    $0x3f
        !          1074:        rei
        !          1075: 
        !          1076:        .globl  _Xdzrint0
        !          1077:        .align  2
        !          1078: _Xdzrint0:
        !          1079:        pushr   $0x3f
        !          1080:        pushl   $0
        !          1081:        calls   $1,_dzrint
        !          1082:        popr    $0x3f
        !          1083:        rei
        !          1084: 
        !          1085:        .globl  _Xdzxint0
        !          1086:        .align  2
        !          1087: _Xdzxint0:
        !          1088:        pushr   $0x3f
        !          1089:        movl    $0,r0
        !          1090:        jbr     _dzdma
        !          1091: 
        !          1092:        .globl  _Xdzrint1
        !          1093:        .align  2
        !          1094: _Xdzrint1:
        !          1095:        pushr   $0x3f
        !          1096:        pushl   $1
        !          1097:        calls   $1,_dzrint
        !          1098:        popr    $0x3f
        !          1099:        rei
        !          1100: 
        !          1101:        .globl  _Xdzxint1
        !          1102:        .align  2
        !          1103: _Xdzxint1:
        !          1104:        pushr   $0x3f
        !          1105:        movl    $1,r0
        !          1106:        jbr     _dzdma
        !          1107: 
        !          1108:        .globl  _Xdzrint2
        !          1109:        .align  2
        !          1110: _Xdzrint2:
        !          1111:        pushr   $0x3f
        !          1112:        pushl   $2
        !          1113:        calls   $1,_dzrint
        !          1114:        popr    $0x3f
        !          1115:        rei
        !          1116: 
        !          1117:        .globl  _Xdzxint2
        !          1118:        .align  2
        !          1119: _Xdzxint2:
        !          1120:        pushr   $0x3f
        !          1121:        movl    $2,r0
        !          1122:        jbr     _dzdma
        !          1123: 
        !          1124:        .globl  _Xdzrint3
        !          1125:        .align  2
        !          1126: _Xdzrint3:
        !          1127:        pushr   $0x3f
        !          1128:        pushl   $3
        !          1129:        calls   $1,_dzrint
        !          1130:        popr    $0x3f
        !          1131:        rei
        !          1132: 
        !          1133:        .globl  _Xdzxint3
        !          1134:        .align  2
        !          1135: _Xdzxint3:
        !          1136:        pushr   $0x3f
        !          1137:        movl    $3,r0
        !          1138:        jbr     _dzdma
        !          1139: 
        !          1140:        .globl  _Xdzrint4
        !          1141:        .align  2
        !          1142: _Xdzrint4:
        !          1143:        pushr   $0x3f
        !          1144:        pushl   $4
        !          1145:        calls   $1,_dzrint
        !          1146:        popr    $0x3f
        !          1147:        rei
        !          1148: 
        !          1149:        .globl  _Xdzxint4
        !          1150:        .align  2
        !          1151: _Xdzxint4:
        !          1152:        pushr   $0x3f
        !          1153:        movl    $4,r0
        !          1154:        jbr     _dzdma
        !          1155: 
        !          1156:        .globl  _Xdzrint5
        !          1157:        .align  2
        !          1158: _Xdzrint5:
        !          1159:        pushr   $0x3f
        !          1160:        pushl   $5
        !          1161:        calls   $1,_dzrint
        !          1162:        popr    $0x3f
        !          1163:        rei
        !          1164: 
        !          1165:        .globl  _Xdzxint5
        !          1166:        .align  2
        !          1167: _Xdzxint5:
        !          1168:        pushr   $0x3f
        !          1169:        movl    $5,r0
        !          1170:        jbr     _dzdma
        !          1171: 
        !          1172:        .globl  _Xdzrint6
        !          1173:        .align  2
        !          1174: _Xdzrint6:
        !          1175:        pushr   $0x3f
        !          1176:        pushl   $6
        !          1177:        calls   $1,_dzrint
        !          1178:        popr    $0x3f
        !          1179:        rei
        !          1180: 
        !          1181:        .globl  _Xdzxint6
        !          1182:        .align  2
        !          1183: _Xdzxint6:
        !          1184:        pushr   $0x3f
        !          1185:        movl    $6,r0
        !          1186:        jbr     _dzdma
        !          1187: 
        !          1188:        .globl  _Xdzrint7
        !          1189:        .align  2
        !          1190: _Xdzrint7:
        !          1191:        pushr   $0x3f
        !          1192:        pushl   $7
        !          1193:        calls   $1,_dzrint
        !          1194:        popr    $0x3f
        !          1195:        rei
        !          1196: 
        !          1197:        .globl  _Xdzxint7
        !          1198:        .align  2
        !          1199: _Xdzxint7:
        !          1200:        pushr   $0x3f
        !          1201:        movl    $7,r0
        !          1202:        jbr     _dzdma
        !          1203: 
        !          1204:        .globl  _Xtsintr0
        !          1205:        .align  2
        !          1206: _Xtsintr0:
        !          1207:        pushr   $0x3f
        !          1208:        pushl   $0
        !          1209:        calls   $1,_tsintr
        !          1210:        popr    $0x3f
        !          1211:        rei
        !          1212: 

unix.superglobalmegacorp.com

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