Annotation of cci/d/dmp4/temp$.s, revision 1.1

1.1     ! root        1: 
        !             2: /*     privileged registers constants (addresses)                      */
        !             3: 
        !             4: 
        !             5: 
        !             6:        .set    SBR,0                   /*system base register          */
        !             7:        .set    SLR,1                   /*system length reg             */
        !             8:        .set    P0BR,2                  /*p0 base reg                   */
        !             9:        .set    P0LR,3                  /*p0 length reg                 */
        !            10:        .set    P1BR,4                  /*p1 base reg                   */
        !            11:        .set    P1LR,5                  /*p1 length reg                 */
        !            12:        .set    P2BR,6                  /*p2 base reg                   */
        !            13:        .set    P2LR,7                  /*p2 length reg                 */
        !            14:        .set    IPL,8                   /*int priority level reg        */
        !            15:        .set    MME,9                   /*memory mgmt enable reg        */
        !            16:        .set    TBIA,10                 /*trans buf invalidate all      */
        !            17:                                        /*entries                       */
        !            18:        .set    TBIS,11                 /*trans buf invalidate single   */
        !            19:                                        /*entry                         */
        !            20:        .set    DCK,12                  /*data cache key                */
        !            21:        .set    CCK,13                  /*code cache key                */
        !            22:        .set    PCBB,14                 /*process control block base    */
        !            23:        .set    ISP,15                  /*interrupt stack pointer       */
        !            24:        .set    SIRR,16                 /*software int request reg      */
        !            25:        .set    SISR,17                 /*software int summary reg      */
        !            26:        .set    SCBB,18                 /*system control block base reg */
        !            27:        .set    KSP,19                  /*kernel stack pointer reg      */
        !            28:        .set    USP,20                  /*user stack pointer            */
        !            29:        .set    DCB,21                  /*CPU2 DCB                      */
        !            30:        .set    PACC,23                 /*purge (invalidate) all pages  */
        !            31:                                        /*of process in code cache      */
        !            32:        .set    P1DC,24                 /*purge one page of data cache  */
        !            33:        .set    PADC,25                 /*purge all the pages of        */
        !            34:                                        /*process in data cache         */
        !            35:        .set    HISR,26                 /* Hardware interrupt summary reg  */
        !            36:        .set    DCR,27                  /* Diagnostic control register  */
        !            37:        .set    PDCS,28                 /* Purge 1 data cache slot      */
        !            38:        
        !            39: #
        !            40:  #TAHOE program status longword
        !            41: #
        !            42: 
        !            43:        .set    PSL_C,0x00000001        /* carry bit                     */
        !            44:        .set    PSL_V,0x00000002        /* overflow bit                  */
        !            45:        .set    PSL_Z,0x00000004        /* zero bit                      */
        !            46:        .set    Z,0x00000004
        !            47:        .set    PSL_N,0x00000008        /* negative bit                  */
        !            48:        .set    PSL_T,0x00000010        /* trace enable bit              */
        !            49:        .set    PSL_I,0x00000020        /* integer overflow enable bit   */
        !            50:        .set    PSL_EN_OVFL,0x20        /* integer overflow enable bit   */
        !            51:        .set    PSL_EN_UNDFL,0x40       /* floating underflow enable     */
        !            52:        .set    PSL_DBL,0x80            /* dbl precision Accumulator bit */
        !            53:        .set    PSL_IPL,0x001f0000      /* interrupt priority level      */
        !            54:        .set    PSL_MOD,0x01000000      /* mode = 1 means user           */
        !            55:        .set    PSL_IS,0x04000000       /* interrupt stack               */
        !            56:        .set    PSL_TP,0x40000000       /* trace pending                 */
        !            57: 
        !            58: #
        !            59:  # TAHOE page table entry
        !            60:  #/
        !            61:        .set    PG_V,0x8000000
        !            62:        .set    PG_PROT,0x78000000
        !            63:        .set    PG_M,0x04000000
        !            64:        .set    PG_USED,0x02000000
        !            65:        .set    PG_NC,0x01000000
        !            66:        .set    PG_PFNUM,0x003fffff
        !            67: 
        !            68:        .set    PG_NOACC,0
        !            69:        .set    PG_KR,0x40000000
        !            70:        .set    PG_KW,0x60000000
        !            71:        .set    PG_URKR,0x50000000
        !            72:        .set    PG_URKW,0x70000000
        !            73:        .set    PG_UW,0x78000000
        !            74: 
        !            75:  #*    PCB offsets & diagnostic extension to pcb                       */
        !            76:  #*    PCB is at pcb0                                                  */
        !            77: 
        !            78: 
        !            79:        .set    PCB_SIZE,        24     
        !            80:        .set    PCB_KSP,         0
        !            81:        .set    PCB_USP,         4
        !            82:        .set    PCB_R0,          8
        !            83:        .set    PCB_R1,          12
        !            84:        .set    PCB_R2,          16
        !            85:        .set    PCB_R3,          20
        !            86:        .set    PCB_R4,          24
        !            87:        .set    PCB_R5,          28
        !            88:        .set    PCB_R6,          32
        !            89:        .set    PCB_R7,          36
        !            90:        .set    PCB_R8,          40
        !            91:        .set    PCB_R9,          44
        !            92:        .set    PCB_R10,         48
        !            93:        .set    PCB_R11,         52
        !            94:        .set    PCB_R12,         56
        !            95:        .set    PCB_R13,         60
        !            96:        .set    PCB_PC,          64
        !            97:        .set    PCB_PSL,         68
        !            98:        .set    PCB_P0BR,        72
        !            99:        .set    PCB_P0LR,        76
        !           100:        .set    PCB_P1BR,        80
        !           101:        .set    PCB_P1LR,        84
        !           102:        .set    PCB_P2BR,        88
        !           103:        .set    PCB_P2LR,        92
        !           104:        .set    PCB_ACCM,        96
        !           105:        .set    PCB_ACCL,       100
        !           106:  #*
        !           107:  #     Diagnostic pcb extension
        !           108:  #/
        !           109:        .set    PCB_STAT,       104     /*process status,statistics,id,etc*/
        !           110: 
        !           111: 
        !           112: 
        !           113:  #*    fundamental constants                                           */
        !           114: 
        !           115:  #*
        !           116:  # fundamental constants of the implementation--
        !           117:  # cannot be changed easily.
        !           118:  #/
        !           119: 
        !           120:        .set    NBPG,1024
        !           121:        .set    PGOFSET,(NBPG-1)        /* byte offset into page */
        !           122:        .set    PGSHIFT,10              /* LOG2(NBPG) */
        !           123:        .set    HIGH,0x1f
        !           124: 
        !           125: 
        !           126:  #*    SCB offsets                                                     */
        !           127:  #*    SCB is at scb                                                   */
        !           128: 
        !           129:        .set    PFVEC,1*4               /*power fail                    */
        !           130:        .set    PRVEC,2*4               /*power restore                 */
        !           131:        .set    CLOCKVEC,7*4            /*hard clock vector             */
        !           132:        .set    CRVEC,0xa*4             /*console receive               */
        !           133:        .set    CXVEC,44                /*console transmit              */
        !           134:        .set    SIVEC1,0x1e*4           /*software int vec #1           */
        !           135:                                        /*for 2,3,..15, sub 4,8,.. 56   */
        !           136:                                        /*from SIVEC1                   */      
        !           137:        .set    BEVEC,0x20*4            /*bus error                     */      
        !           138:        .set    SYSVEC,0x2b*4           /*system call (kcall)           */
        !           139:        .set    PINSTVEC,0x2c*4         /*privileged instruction fault  */
        !           140:        .set    PRIVSVEC,0x2c*4         /*privileged instruction fault  */
        !           141:        .set    ROVEC,0x2d*4            /*reserved operand fault        */
        !           142:        .set    RAVEC,0x2e*4            /*reserved addressing fault     */
        !           143:        .set    PROTVEC,0x2f*4          /*access control violation      */
        !           144:        .set    TRANS,0x30              /*translation fault vector      */
        !           145:        .set    TRANSVEC,0x30*4         /*translation fault vector      */
        !           146:        .set    KSPVEC,0x31*4           /*kernel stack not valid vector */
        !           147:        .set    TRACEVEC,0x32*4         /*trace vector                  */
        !           148:        .set    BPTVEC,0x33*4           /*break point fault             */
        !           149:        .set    ARITHVEC,0x34*4         /*arithmetic trap               */
        !           150:        .set    ALIGNVEC,0x35*4         /*alignment vector              */      
        !           151:        .set    FPMVEC,0x37*4           /*fpp emulation vector          */
        !           152:        .set    IO14VEC,256             /*io vector, ipl #14            */
        !           153:        .set    IO15VEC,320             /*io vector, ipl #15            */
        !           154:        .set    IO16VEC,384             /*io vector, ipl #16            */
        !           155:        .set    IO17VEC,448             /*io vector, ipl #17            */
        !           156: 
        !           157:  #*    SPT (system page table) offsets                                 */
        !           158:  #*    SPT is at Sysmap                                                */
        !           159: 
        !           160:        .set    SCBPTE,8                /*system control block pte offset*/
        !           161:        .set    BUFPTE,12               /*buffer pte offset             */
        !           162:        .set    ISPTE,16                /*interrupt stack page 0        */
        !           163:        .set    IS1PTE,20               /*interrupt stack page 1        */
        !           164:        .set    SPTPTE,20               /*system page table page 1      */
        !           165:        .set    SPT1PTE,20              /*system page table page 2      */
        !           166:        .set    IOMAPPTE,24             /*io map                        */
        !           167:        .set    PCBPTE,28               /*process control blocks pte    */
        !           168:        .set    U0P0PTE,32              /*U0 p0pt pte                   */
        !           169:        .set    U0P1PTE,36              /*U0 p1pt pte                   */
        !           170:        .set    U0P2PTE,40              /*U0 p2pt pte                   */
        !           171:        .set    U1P0PTE,44
        !           172:        .set    U1P1PTE,48
        !           173:        .set    U1P2PTE,52
        !           174:        .set    U2P0PTE,56
        !           175:        .set    U2P1PTE,60
        !           176:        .set    U2P2PTE,64
        !           177:        .set    U3P0PTE,68
        !           178:        .set    U3P1PTE,72
        !           179:        .set    U3P2PTE,76
        !           180:        .set    U4P0PTE,80
        !           181:        .set    U4P1PTE,84
        !           182:        .set    U4P2PTE,88
        !           183:        .set    U5P0PTE,92
        !           184:        .set    U5P1PTE,96
        !           185:        .set    U5P2PTE,100
        !           186:        .set    U6P0PTE,104
        !           187:        .set    U6P1PTE,108
        !           188:        .set    U6P2PTE,112
        !           189:        .set    U7P0PTE,116             /*U7 p0pt pte                   */
        !           190:        .set    U7P1PTE,120             /*U7 p1pt pte                   */
        !           191:        .set    U7P2PTE,124             /*U7 p2pt pte                   */
        !           192:        .set    IOB0PTE,128             /*io buffer 0 pte               */
        !           193:        .set    IOB1PTE,132
        !           194:        .set    IOB2PTE,136
        !           195:        .set    IOB3PTE,140
        !           196:        .set    IOB4PTE,144
        !           197:        .set    IOB5PTE,148
        !           198:        .set    IOB6PTE,152
        !           199:        .set    IOB7PTE,156             /*io buffer 7 pte               */
        !           200: 
        !           201: 
        !           202:  #*    trap.h  4.6     81/03/03        */
        !           203: 
        !           204:  #*
        !           205:  #* Trap type values
        !           206:  #/
        !           207: 
        !           208:        .set    RESADFLT,0              /* reserved addressing fault */
        !           209:        .set    PRIVINFLT,1             /* privileged instruction fault */
        !           210:        .set    RESOPFLT,2              /* reserved operand fault */
        !           211:        .set    BPTFLT,3                /* bpt instruction fault */
        !           212:        .set    ALIGNFLT,4              /* alignment fault */
        !           213:        .set    SYSCALL,5               /* kcall instruction (syscall trap) */
        !           214:        .set    ARITHTRAP,6             /* arithmetic trap */
        !           215:        .set    PROTFLT,7               /* protection fault */
        !           216:        .set    TRCTRAP,8               /* trace trap */
        !           217:        .set    TRANSFLT,9              /* translation not valid fault */
        !           218:        .set    DONE,255
        !           219: 
        !           220: #
        !           221:  #  Event codes
        !           222: #
        !           223:        .set    RTCLOCK_CODE,7          /* real time clock event */
        !           224:        .set    RESOP_CODE,0x2d         /* reserved operand fault */
        !           225:        .set    RESAD_CODE,0x2e         /* reserved address fault */
        !           226:        .set    ARITH_CODE,0x34         /* arithmetic fault       */
        !           227:        .set    FPM_CODE,0x37           /* fpp emulation trap     */
        !           228:        .set    INTEGER_OVERFLOW,1      /* code for arith. fault  */
        !           229: 
        !           230: #
        !           231:  #  Arithmetic Event types
        !           232: #
        !           233:        .set    INT_OVFL_CODE,1         /* integer overflow     */
        !           234:        .set    INT_0_DIV_CODE,2        /* integer divide by 0  */
        !           235:        .set    FLT_0_DIV_CODE,3        /* floating divide by 0 */
        !           236:        .set    FLT_OVFL_CODE,4         /* floating overflow    */
        !           237:        .set    FLT_UNDFL_CODE,5        /* floating underflow   */
        !           238: 
        !           239: #
        !           240:  #  Floating Point Instruction Op-Codes
        !           241: #
        !           242:        .set  LDF_OP_CODE,0x06          /* sgl load acc. instr      */
        !           243:        .set  LDD_OP_CODE,0x07          /* dbl load acc. instr      */
        !           244:        .set  LNF_OP_CODE,0x16          /* sgl load-neg acc. instr  */
        !           245:        .set  LND_OP_CODE,0x17          /* dbl load-neg acc. instr  */
        !           246:        .set  STF_OP_CODE,0x26          /* sgl store acc. instr     */
        !           247:        .set  STD_OP_CODE,0x27          /* dbl store acc. instr     */
        !           248:        .set  CMPF_OP_CODE,0x36         /* sgl compare instr        */
        !           249:        .set  CMPD_OP_CODE,0x37         /* dbl compare instr        */
        !           250:        .set  CMPF2_OP_CODE,0x46        /* sgl compare 2 instr      */
        !           251:        .set  CMPD2_OP_CODE,0x47        /* dbl compare 2 instr      */
        !           252:        .set  TSTF_OP_CODE,0x56         /* sgl test acc. instr      */
        !           253:        .set  TSTD_OP_CODE,0x57         /* dbl test acc. instr      */
        !           254:        .set  PUSHD_OP_CODE,0x67        /* dbl push acc. instr      */
        !           255:        .set  CVLF_OP_CODE,0x76         /* convert int to sgl instr */
        !           256:        .set  CVLD_OP_CODE,0x77         /* convert int to dbl instr */
        !           257:        .set  CVFL_OP_CODE,0x86         /* convert sgl to int instr */
        !           258:        .set  CVDL_OP_CODE,0x87         /* convert dbl to int instr */
        !           259:        .set  LDFD_OP_CODE,0x97         /* load sgl to dbl instr    */
        !           260:        .set  CVDF_OP_CODE,0xa6         /* convert dbl to sgl instr */
        !           261:        .set  NEGF_OP_CODE,0xb6         /* negate sgl acc. instr    */
        !           262:        .set  NEGD_OP_CODE,0xb7         /* negate dbl acc. instr    */
        !           263:        .set  ADDF_OP_CODE,0xc6         /* sgl add instr            */
        !           264:        .set  ADDD_OP_CODE,0xc7         /* dbl add instr            */
        !           265:        .set  SUBF_OP_CODE,0xd6         /* sgl subtract instr       */
        !           266:        .set  SUBD_OP_CODE,0xd7         /* dbl subtract instr       */
        !           267:        .set  MULF_OP_CODE,0xe6         /* sgl multiply instr       */
        !           268:        .set  MULD_OP_CODE,0xe7         /* dbl multiply instr       */
        !           269:        .set  DIVF_OP_CODE,0xf6         /* sgl divide instr         */
        !           270:        .set  DIVD_OP_CODE,0xf7         /* dbl divide instr         */
        !           271:        .set  SINF_OP_CODE,0x05         /* sgl sine instr           */
        !           272:        .set  COSF_OP_CODE,0x15         /* sgl cosine instr         */
        !           273:        .set  ATANF_OP_CODE,0x25        /* sgl arc-tangent instr    */
        !           274:        .set  LOGF_OP_CODE,0x35         /* sgl natural log instr    */
        !           275:        .set  SQRTF_OP_CODE,0x45        /* sgl square root instr    */
        !           276:        .set  EXPF_OP_CODE,0x55         /* sgl "e to the x" instr   */
        !           277:        .set  MULL2_OP_CODE,0x4c        /* integer multiply - 2 ops */
        !           278:        .set  MULL3_OP_CODE,0x5c        /* integer multiply - 3 ops */
        !           279: 
        !           280: 
        !           281: #
        !           282:  #  Addressing test constants - These must agree with "fpp_defs.h"
        !           283: #
        !           284:        .set ADR_ABSOLUTE,1     /* absolute address                 */
        !           285:        .set ADR_LITERAL,2      /* literal -short immediate byte    */
        !           286:        .set ADR_IM_B,3         /* immediate byte                   */
        !           287:        .set ADR_IM_W,4         /* immediate word                   */
        !           288:        .set ADR_IM_L,5         /* immediate long-word              */
        !           289:        .set ADR_B_DSP,6        /* byte displ relative              */
        !           290:        .set ADR_W_DSP,7        /* word displ relative              */
        !           291:        .set ADR_L_DSP,8        /* long-word displ relative         */
        !           292:        .set ADR_B_DSP_DEF,9    /* byte displ relative deferred     */
        !           293:        .set ADR_W_DSP_DEF,10   /* word displ relative deferred     */
        !           294:        .set ADR_L_DSP_DEF,11   /* L-word displ relative deferred   */
        !           295:        .set ADR_REG,12         /* direct register                  */
        !           296:        .set ADR_REG_DEF,13     /* register deferred                */
        !           297:        .set ADR_FP_DEF,14      /* FP deferred                      */
        !           298:        .set ADR_SP_DEF,15      /* SP deferred                      */
        !           299:        .set ADR_PUSH,16        /* auto-decrement SP                */
        !           300:        .set ADR_POP,17         /* auto-increment SP                */
        !           301:        .set ADR_POP_DEF,18     /* auto-increment SP deferred       */
        !           302:        .set ADR_REG_B,19       /* register + byte displ            */
        !           303:        .set ADR_REG_W,20       /* register + word displ            */
        !           304:        .set ADR_REG_L,21       /* register + long-word displ       */
        !           305:        .set ADR_REG_B_DEF,22   /* register + byte displ deferred   */
        !           306:        .set ADR_REG_W_DEF,23   /* register + word displ deferred   */
        !           307:        .set ADR_REG_L_DEF,24   /* register + L-word displ deferred */
        !           308:        .set ADR_I_FP_DEF,25    /* indexed (frame pointer deferred) */
        !           309:        .set ADR_I_L,26         /* indexed (longword displacement)  */
        !           310: 
        !           311: 
        !           312:  #*************************************************************************
        !           313: #
        !           314:  #     Stuff for the Demand Paging , Events, & Addressing Tests
        !           315: #
        !           316:  #************************************************************************/
        !           317:        .set SGL,1                      /* sgl precision data           */
        !           318:        .set DBL,2                      /* dbl precision data           */
        !           319:        .set ENABLE_EVENTS,0x60         /* enable ovfl & undfl events   */
        !           320:        .set NONE,0                     /* no operand flag              */
        !           321:        .set LOAD,1                     /* read-the-operand flag        */
        !           322:        .set STORE,2                    /* store-the-operand flag       */
        !           323: 
        !           324:        .set NO_EVT_HLT,1               /* halt code: did not Get event  */
        !           325:        .set EVT_MSK_HLT,2              /* halt code: got masked event   */
        !           326:        .set BAD_PSL_HLT,3              /* halt code: wrong PSL value    */
        !           327:        .set PUSH_CNT_HLT,4             /* halt code: wrong # ops on stk */
        !           328:        .set PUSH_PSL_HLT,5             /* halt code: bad PSL on stack   */
        !           329:        .set PUSH_PC_HLT,6              /* halt code: bad PC on stack    */
        !           330:        .set BAD_REG_HLT,7              /* halt code: bad final register */
        !           331:        .set BAD_ACC_HLT,8              /* halt code: bad final Acc.     */
        !           332: 
        !           333: #
        !           334:  # set DMP_PG_0 to the 1st empty page
        !           335: #
        !           336:        .set DMP_PG_0,0x36000
        !           337:        .set DMP_PG_1,DMP_PG_0+0x400
        !           338:        .set DMP_PG_2,DMP_PG_1+0x400
        !           339:        .set DMP_PG_3,DMP_PG_2+0x400
        !           340:        .set DMP_PG_4,DMP_PG_3+0x400
        !           341:        .set DMP_PG_5,DMP_PG_4+0x400
        !           342:        .set DMP_PG_6,DMP_PG_5+0x400
        !           343:        .set DMP_PG_7,DMP_PG_6+0x400
        !           344:        .set DMP_PG_8,DMP_PG_7+0x400
        !           345:        .set DMP_PG_9,DMP_PG_8+0x400
        !           346:        .set DMP_PG_10,DMP_PG_9+0x400
        !           347:        .set DMP_PG_11,DMP_PG_10+0x400
        !           348:        .set DMP_PG_12,DMP_PG_11+0x400
        !           349:        .set DMP_PG_13,DMP_PG_12+0x400
        !           350: 
        !           351: #
        !           352:  # test code space for the address / demand page tests
        !           353: #
        !           354:        .set START_OF_CODE,DMP_PG_1-20  /* 1st addr of test-code space  */
        !           355:        .set CODE_BUF_SIZE,40           /* # bytes in test-code space   */
        !           356:        .set END_OF_CODE,START_OF_CODE+CODE_BUF_SIZE
        !           357: 
        !           358: #
        !           359:  # data locations used by the event and demand page tests
        !           360: #
        !           361:        .set _dmp_byte_op_1,DMP_PG_1+0x30       /* 'byte offset' data */
        !           362:        .set _dmp_byte_op_2,DMP_PG_1+0x50       /* 'byte offset' data */
        !           363:        .set _dmp_byte_op_3,DMP_PG_1+0x70       /* 'byte offset' data */
        !           364:        .set _dmp_op_1,DMP_PG_3-4               /* 1st data word      */
        !           365:        .set _dmp_op_1_ptr,DMP_PG_4+0x30        /* ptr to 1st data wd */
        !           366:        .set _dmp_op_2_ptr,DMP_PG_5+0x30        /* ptr to 2nd data wd */
        !           367:        .set _dmp_op_2,DMP_PG_7-4               /* 2nd data word      */
        !           368:        .set _dmp_op_3,DMP_PG_8                 /* 3rd data word      */
        !           369:        .set _dmp_op_3_ptr,DMP_PG_9+0x30        /* ptr to 3rd data wd */
        !           370:        .set _dmp_op_4,DMP_PG_10                /* 4th data (for pipes) */
        !           371:        .set _dmp_op_5,DMP_PG_11                /* 5th data (for pipes) */
        !           372:        .set _sp_minus,DMP_PG_13-4              /* SP for POPs        */
        !           373:        .set _sp_page,DMP_PG_13                 /* SP page boundary   */
        !           374:        .set _sp_plus,DMP_PG_13+4               /* SP for PUSHs       */
        !           375: 
        !           376: 
        !           377: /************************************************************************/
        !           378: /*                          Revision History                           */
        !           379: /*                             ----------                              */
        !           380: /*     Rev 1.0                                          1 Aug 85       */
        !           381: /*                                                                     */
        !           382: /*     Initial release of the diagnostic                               */
        !           383: /*                                                                     */
        !           384: /************************************************************************/
        !           385: 
        !           386:  #     INIT.X for the Demand Pageing Tests                             
        !           387: #
        !           388:  #     This file is a diagnostic version of locore.s.                  
        !           389:  #     It contains the following:                                      
        !           390:  #     *system data area = scb, dump buffer, interrupt stack,          
        !           391:  #     *system page table,user page tables,pcbs,iomap, & io buffers.   
        !           392:  #                                                                     
        !           393:  #     *system code = interrupt vectors, initialization of system data,
        !           394:  #     *memory size calculation,initialization of SPT, zeroing of      
        !           395:  #     *unused memory, & loading of SBR & SLR.                         
        !           396:  #     *                                                               
        !           397:  #     *at the end of this code, you are ready to go to virtual mode.  
        !           398:  #     * --- GOOD LUCK!                                                
        !           399: #
        !           400:  ##########################################################################
        !           401: #
        !           402:  #   6-Mar-85 :  changed to user mode execution
        !           403:  #  11-Mar-85 :  moved mode changeing from here to RUN_CODE
        !           404:  #  17-Jul-85 :  added "mtpr" test for fpp/no-fpp wcs
        !           405:  ##########################################################################
        !           406: 
        !           407: 
        !           408: /*     privileged registers addresses  */
        !           409: #include       "prvreg.h"
        !           410:        
        !           411: /*     program status long word definition     */
        !           412: #include       "psl.h" 
        !           413: 
        !           414: /*     page table entry definition             */
        !           415: #include       "pte.h"
        !           416:        
        !           417: /*     process control block offsets   */
        !           418: #include       "pcboffset.h"   
        !           419: 
        !           420: /*     fundamental constants for globl use     */
        !           421: #include       "const.h"       
        !           422: 
        !           423: /*     system control block offsets*/
        !           424: #include       "scboffset.h"
        !           425: /*     SPT offsets                             */
        !           426: #include       "sptoffset.h"
        !           427: 
        !           428: /*     trap numbers*/
        !           429: #include       "trap.h"        
        !           430: 
        !           431: 
        !           432: #define V_TRAP         0
        !           433: #define V_SYSCALL      4
        !           434: 
        !           435:        .set    HIGH,0x1f       /*mask for disabling all interrupts     */
        !           436:        .set    MCKVEC,4        /*scb offset for machinecheck vector    */
        !           437:        .set    NISP,2          /*no. of interrupt stack pages          */
        !           438:        .set    DONE,255        /*user process done code                */
        !           439:        .set    TTRAP,0x32
        !           440:        .set    PRIVS,0x2c
        !           441: 
        !           442:        .text
        !           443: 
        !           444:                /* PROCESSOR STORAGE AREA               */
        !           445: #include "pstorage.s"
        !           446: 
        !           447:        .globl  _Entry
        !           448: _Entry:
        !           449:        jmp     start
        !           450:        .space  (1024-6)
        !           451: 
        !           452: /*             globl dump buffer to be used for communication          */
        !           453: /*             between tests & interrupt handlers, & other misc.       */
        !           454: /*             purposes.                                               */
        !           455:                                
        !           456: /*     Physical page 3 : Used for global variables             */
        !           457: 
        !           458:        .set    NLWU,35         /*no. of longwords already used         */
        !           459:                                /*this must be changed when you define  */
        !           460:                                /*additional variables below before     */
        !           461:                                /*_dbuf                                 */
        !           462:        .globl  _Codek
        !           463: _Codek:        .long   0               /* Code cache key */
        !           464: 
        !           465:        .globl  _restart
        !           466: _restart:
        !           467:        .space  4               /*contains restart address for restarting*/
        !           468:                                /*after power is restored (loaded by    */
        !           469:                                /*power fail interrupt handler & used by*/
        !           470:                                /*CPU 2                                 */      
        !           471:        .globl  _maxmem
        !           472: _maxmem:
        !           473:        .space  4               /*memory size in no of bytes            */
        !           474: 
        !           475:        .globl  _maxpages
        !           476: _maxpages:
        !           477:        .space  4               /*memory size in no. of physical pages  */
        !           478: 
        !           479:        .globl  _lastadd
        !           480: _lastadd:
        !           481:        .space  4               /*address of the last long word         */
        !           482: 
        !           483:        .globl  _unused
        !           484: _unused:
        !           485:        .space  4               /*first unused page in system space     */
        !           486: 
        !           487:        .globl  _ctlblk
        !           488: _ctlblk:
        !           489:        .long   0               /* pointer to SCB */
        !           490: 
        !           491:        .globl  _savvec0        /*save vectors area                     */
        !           492: _savvec0:
        !           493:        .space  4
        !           494: 
        !           495:        .globl  _savvec1        /*save vectors area                     */
        !           496: _savvec1:
        !           497:        .space  4
        !           498: 
        !           499:        .globl  _savvec2        /*save vectors area                     */
        !           500: _savvec2:
        !           501:        .space  4
        !           502: 
        !           503:        .globl  _savvec3        /*save vectors area                     */
        !           504: _savvec3:
        !           505:        .space  4
        !           506: 
        !           507:        .globl  _savvec4        /*save vectors area                     */
        !           508: _savvec4:
        !           509:        .space  4
        !           510: 
        !           511:        .globl  _savvec5        /*save vectors area                     */
        !           512: _savvec5:
        !           513:        .space  4
        !           514:        .globl  _savvec6        /*save vectors area                     */
        !           515: _savvec6:
        !           516:        .space  4
        !           517:        .globl  _savvec7        /*save vectors area                     */
        !           518: _savvec7:
        !           519:        .space  4
        !           520: 
        !           521:        .globl  _savvec8        /*save vectors area                     */
        !           522: _savvec8:
        !           523:        .space  4
        !           524: 
        !           525:        .globl  _r_no
        !           526: _r_no:
        !           527:        .long   0
        !           528:        .globl  _pt_base
        !           529: _pt_base:
        !           530:        .long   0
        !           531:        .globl  _saved_psl
        !           532: _saved_psl:
        !           533:        .long   0
        !           534:        .globl  _saved_sp
        !           535: _saved_sp:
        !           536:        .long   0
        !           537:        .globl  _saved_fp
        !           538: _saved_fp:
        !           539:        .long   0
        !           540:        .globl  _ret_adr
        !           541: _ret_adr:
        !           542:        .long   0
        !           543:        .globl  _exp_par0
        !           544: _exp_par0:
        !           545:        .long   0
        !           546:        .globl  _exp_par1
        !           547: _exp_par1:
        !           548:        .long   0
        !           549:        .globl  _f_vaddr
        !           550: _f_vaddr:
        !           551:        .long   0                       /* VA that caused fault */
        !           552: 
        !           553:        .globl  _f_ptr
        !           554: _f_ptr:
        !           555:        .long   0                       /* Pointer to fault parameters */
        !           556:        .globl  _df_cnt
        !           557: _df_cnt:
        !           558:        .long   0                       /* Count of data fault */
        !           559: 
        !           560:        .globl  _if_cnt
        !           561: _if_cnt:
        !           562:        .long   0                       /* Count of Instruction fault */
        !           563: 
        !           564:        .globl  _newepc
        !           565: _newepc:
        !           566:        .long   0
        !           567: 
        !           568:        .globl  _errcnt
        !           569: _errcnt:
        !           570:        .long   0
        !           571: 
        !           572:        .globl  _clk_cnt
        !           573: _clk_cnt:
        !           574:        .long   0
        !           575: 
        !           576:        .globl  _ttcnt
        !           577: _ttcnt:
        !           578:        .long   0                       /* Count of Trap exception */
        !           579:        .globl  _trcnt
        !           580: _trcnt:
        !           581:        .long   0                       /* Count of Translation fault */
        !           582: 
        !           583:        .globl  _Ufpte
        !           584: _Ufpte: .long  0
        !           585:        .globl  _Ulpte
        !           586: _Ulpte: .long  0
        !           587: 
        !           588:        .globl  _dbuf           /*dump buffer left out of 1K            */
        !           589: _dbuf:
        !           590:        .space  NBPG - (NLWU *4)
        !           591: edbuf:
        !           592: 
        !           593: 
        !           594:        .globl  _intstack       /* Interrupt stack                      */
        !           595: _intstack:                     /* Physical pages 4 & 5                 */
        !           596:        .space  NISP*NBPG
        !           597: eintstack:
        !           598: 
        !           599: 
        !           600:        .set    SYSPTSIZE,512   /* No. of entries in SPT                */
        !           601:  
        !           602: /*
        !           603:        System Page Table -- physical page 6 & 7
        !           604: */ 
        !           605:        .align  2
        !           606:        .globl  _Sysmap
        !           607: _Sysmap:
        !           608:        .space  SYSPTSIZE*4     /* 512 max pages allowed for system     */
        !           609: eSysmap:
        !           610:        .globl  _Syssize
        !           611:        .set    _Syssize,(eSysmap-_Sysmap)/4    /* should be SYSPTSIZE  */
        !           612:        
        !           613:        .globl  _iomap          /* Physical page 8      */
        !           614: _iomap:        .space  1024            /* IOMAP - unused       */
        !           615:        .globl  _eiomap
        !           616: _eiomap:
        !           617: 
        !           618:        .globl  _pcb0           /* Physical page 9      */
        !           619: _pcb0: .space  128             /*process control block 0               */
        !           620:        .globl  _pcb1
        !           621: _pcb1: .space 128              /*process control block 1               */
        !           622:        .globl  _pcb2
        !           623: _pcb2: .space 128              /*process control block 2               */
        !           624:        .globl  _pcb3
        !           625: _pcb3: .space 128              /*process control block 3               */
        !           626:        .globl  _pcb4
        !           627: _pcb4: .space 128              /*process control block 4               */
        !           628:        .globl  _pcb5
        !           629: _pcb5: .space 128              /*process control block 5               */
        !           630:        .globl  _pcb6
        !           631: _pcb6: .space 128              /*process control block 6               */
        !           632:        .globl  _pcb7
        !           633: _pcb7: .space 128              /*process control block 7               */
        !           634: 
        !           635: /*
        !           636:        *user #0 page tables -- P0PT, P1PT, P2PT                        
        !           637:        *physical memory     --  page10, 11, & 12  respectively
        !           638: */
        !           639:        .align  2
        !           640:        .globl  _u0p0pt
        !           641: _u0p0pt:
        !           642:        .space  1024            /*255 max pages for user #0 text        */
        !           643:        .globl  _u0p1pt
        !           644: _u0p1pt:       
        !           645:        .space  1024            /*255 max pages for user #0 data        */
        !           646:        .globl  _u0p2pt
        !           647: _u0p2pt:       
        !           648:        .space  1020            /*255 max pages for user #0 stack       */
        !           649: eu0p2pt:
        !           650:        .space  4
        !           651: 
        !           652: /*
        !           653:        *user #1 page tables -- P0PT, P1PT, P2PT                        
        !           654:        *physical memory     --  page13 ,14, & 15  respectively
        !           655: */
        !           656:        .align  2
        !           657:        .globl  _u1p0pt
        !           658: _u1p0pt:
        !           659:        .space  1024            /*255 max pages for user #1 text        */
        !           660:        .globl  _u1p1pt
        !           661: _u1p1pt:       
        !           662:        .space  1024            /*255 max pages for user #1 data        */
        !           663:        .globl  _u1p2pt
        !           664: _u1p2pt:       
        !           665:        .space  1020            /*255 max pages for user #1 stack       */
        !           666: eu1p2pt:
        !           667:        .space  4
        !           668: 
        !           669: 
        !           670: /*
        !           671:        *user #2 page tables -- P0PT, P1PT, P2PT                        
        !           672:        *physical memory     --  page 16, 17 , & 18  respectively
        !           673: */
        !           674:        .align  2
        !           675:        .globl  _u2p0pt
        !           676: _u2p0pt:
        !           677:        .space  1024            /*255 max pages for user #2 text        */
        !           678:        .globl  _u2p1pt
        !           679: _u2p1pt:       
        !           680:        .space  1024            /*255 max pages for user #2 data        */
        !           681:        .globl  _u2p2pt
        !           682: _u2p2pt:       
        !           683:        .space  1020            /*255 max pages for user #2 stack       */
        !           684: eu2p2pt:
        !           685:        .space  4
        !           686: 
        !           687: 
        !           688: /*
        !           689:        *user #3 page tables -- P0PT, P1PT, P2PT                        
        !           690:        *physical memory     --  page 19, 20 , & 21  respectively
        !           691: */
        !           692:        .align  2
        !           693:        .globl  _u3p0pt
        !           694: _u3p0pt:
        !           695:        .space  1024            /*255 max pages for user #3 text        */
        !           696:        .globl  _u3p1pt
        !           697: _u3p1pt:       
        !           698:        .space  1024            /*255 max pages for user #3 data        */
        !           699:        .globl  _u3p2pt
        !           700: _u3p2pt:       
        !           701:        .space  1020            /*255 max pages for user #3 stack       */
        !           702: eu3p2pt:
        !           703:        .space  4
        !           704: 
        !           705: /*
        !           706:        *user #4 thru 6 page tables
        !           707:        *physical memory -- pages 22 thru 30
        !           708: */
        !           709:        .globl  _u4p0pt
        !           710: _u4p0pt:
        !           711:        .space  (9*NBPG) - 4
        !           712: eu6p2pt:
        !           713:        .space  4
        !           714: 
        !           715: /*
        !           716:        Area used for Kernel stack                      
        !           717:        physical memory --  page 31, 32 , 33
        !           718: */
        !           719: 
        !           720:        .align  2
        !           721:        .globl  _Kstack         /* Kernel stack */
        !           722: _Kstack:                       /* Physical pages 31,32,33 */
        !           723:        .space  3*NBPG
        !           724:        .globl  ekstack 
        !           725: ekstack:
        !           726: 
        !           727: 
        !           728:        .globl  _iob0           /*io buffer 0 */
        !           729: _iob0: .space  1024
        !           730:        .globl  _iob1           /*io buffer 1 */
        !           731: _iob1: .space  1024
        !           732:        .globl  _iob2           /*io buffer 2 */
        !           733: _iob2: .space  1024
        !           734:        .globl  _iob3           /*io buffer 3 */
        !           735: _iob3: .space  1024
        !           736:        .globl  _iob4           /*io buffer 4 */
        !           737: _iob4: .space  1024
        !           738:        .globl  _iob5           /*io buffer 5 */
        !           739: _iob5: .space  1024
        !           740:        .globl  _iob6           /*io buffer 6 */
        !           741: _iob6: .space  1024
        !           742: esysdata:
        !           743: 
        !           744: /*     SYSTEM CONTROL BLOCK            */
        !           745: #include "scblock.s"
        !           746: 
        !           747: 
        !           748: 
        !           749: #include       "evthandlers.s"
        !           750: 
        !           751: #define        ACBL(_n1,_n2,_n3,_n4)   addl2 _n2,_n3;  cmpl _n3,_n1;  bleq _n4;
        !           752: 
        !           753: 
        !           754: 
        !           755:  #     *INITIALIZATION CODE
        !           756:  #     *
        !           757:  #     * MME off; mode = k; IPL = 31; IS = 1
        !           758:  #     *
        !           759: 
        !           760:        
        !           761:        .globl  start
        !           762: start:
        !           763:        mtpr    $0,$MME         /* Disable MME */
        !           764:        movl    r0,_run_list
        !           765:        movl    r1,_OPTIONS
        !           766:        clrl    _nonstop        /* clear the continuous run flag */
        !           767:        movl    r2,_count       /* save the test count           */
        !           768:        bneq    1f              /* is count = 0 ?                */
        !           769:        movl    $1,_count       /*   yes -set cycle count = 1    */
        !           770: 1:     bgeq    1f              /* is count < 0 ?                */
        !           771:        movl    $1,_nonstop     /*   yes -set NONSTOP flag       */
        !           772: 1:
        !           773:        clrl    _no_fpp_wcs     /* clear the NO-FPP WCS flag     */
        !           774:        mtpr    $0x400,$DCR     /* check for FPP WCS loaded      */
        !           775:        tstl    r1              /* r1 = 0 if NO-FPP WCS loaded   */
        !           776:        bneq    1f
        !           777:        movl    $1,_no_fpp_wcs  /* set the NO-FPP WCS flag       */
        !           778: 1:
        !           779:        movab   _scb,r0
        !           780:        andl2   $0x3ffffc00,r0
        !           781:        mtpr    r0,$SCBB        /* Set SCBB  */
        !           782:        mtpr    $0x1f,$IPL      /* Set IPL to HIGH */
        !           783: 
        !           784:        andl3   $4,r11,_ss1     /* messages sense switch         */
        !           785: 
        !           786: #
        !           787:  # clear the option flags
        !           788: #
        !           789:        clrl    _halt_flg       /* clear the halt on error flag             */
        !           790:        clrl    _loop_on_err    /* clear the loop on error flag             */
        !           791:        movl    $1,_prt_error   /* set the print error messages flag        */
        !           792:        movl    $1,_prt_hdrs    /* set the print header messages flag       */
        !           793:        movl    $1,_en_data_cache  /* set the enable data cache flag        */
        !           794:        movl    $1,_user_mode   /* set the Run In User Mode flag            */
        !           795:        clrl    _exp_event      /* clear the fpp event expected flag        */
        !           796:        clrl    _event_return   /* clear the fpp event return flag          */
        !           797:        clrl    _unexp_event_ret /*clear the unexpected event return addr   */
        !           798: 
        !           799: #
        !           800:  # set the option flags as needed
        !           801: #
        !           802:        bitl    $1,_OPTIONS     /* bit(0) = HALT ON ERROR */
        !           803:        beql    1f
        !           804:        movl    $1,_halt_flg    /* set the HALT ON ERROR flag */
        !           805: 1:
        !           806:        bitl    $2,_OPTIONS     /* bit(1) = LOOP ON ERROR */
        !           807:        beql    1f
        !           808:        movl    $1,_loop_on_err /* set the LOOP ON ERROR flag */
        !           809: 1:
        !           810:        bitl    $4,_OPTIONS     /* bit(2) = PRINT ERROR MESSAGES */
        !           811:        beql    1f
        !           812:        clrl    _prt_error      /* clear the PRINT ERROR MESSAGES flag */
        !           813: 1:
        !           814:        bitl    $8,_OPTIONS     /* bit(3) = PRINT HEADER MESSAGES */
        !           815:        beql    1f
        !           816:        clrl    _prt_hdrs       /* clear the PRINT HEADER MESSAGES flag */
        !           817: 1:
        !           818:        bitl    $16,_OPTIONS    /* bit(4) = ENABLE DATA CACHE flag */
        !           819:        beql    1f
        !           820:        clrl    _en_data_cache  /* clear the ENABLE DATA CACHE flag */
        !           821: 1:
        !           822:        bitl    $32,_OPTIONS    /* bit(5) = DON'T RUN IN USER MODE flag */
        !           823:        beql    1f
        !           824:        clrl    _user_mode      /* reset the RUN IN USER MODE flag */
        !           825: 1:
        !           826:        movpsl  r1
        !           827:        andl2   $0xffffff00,r1          /* Mask out flags               */
        !           828:        cmpl    r1,$0x041f0000          /*IS on,modes =k & IPL = 31?    */
        !           829:        beql    1f
        !           830: 2:     movl    $1,r0
        !           831:        movl    $0x041f0000,r2
        !           832:        halt                    /* PSL not initialized as expected      */
        !           833: 1:
        !           834:        movl    $_intstack+NISP*NBPG,r0
        !           835:        andl2   $0x3fffffff,r0          /* Mask out bit 30,31 */
        !           836:        mtpr    r0,$ISP                 /* init. ISP            */
        !           837:        movl    r0,sp                   /* in case we get exception     */
        !           838:        movab   (sp),fp                 /* Initialize FP                */
        !           839: #
        !           840:  #     Clear system data area all the way upto system code
        !           841:  #     this includes dump buffer,interrupt stack,spt,iomap,pcbs,user 
        !           842:  #     page tables, & io buffer area.
        !           843: #
        !           844: 3:     
        !           845:        movab   esysdata,r7
        !           846:        movab   _restart,r6
        !           847: 1:     clrl    (r6)
        !           848:        ACBL(r7,$4,r6,1b)
        !           849: #
        !           850:  #     Initialize System Page Table
        !           851: #
        !           852: 5:
        !           853:        clrl    r2
        !           854:        movab   esysdata,r1     /* R1 = Last address in system data area */
        !           855:        andl2   $0x3fffffff,r1  /* Mask out bit 30,31   */
        !           856:        shar    $PGSHIFT,r1,r1  /* Get page no. of last system data addr  */
        !           857:                                /* Map systm data area 1 to 1,kernel writable */
        !           858: 1:
        !           859:        orl3    $PG_V|PG_KW,r2,_Sysmap[r2]
        !           860:        aoblss  r1,r2,1b
        !           861: 
        !           862: #
        !           863:  #     Map system text area 1 to 1, Kernel read/write.
        !           864:  #     For this to work, the label _etext must exist at the end 
        !           865:  #     of system code; Add in 4 more pages for data area used in C
        !           866: #
        !           867:        movab   _Esys,r1        /* Map System text 1 to 1; Kernel R/W */
        !           868:        andl2   $0x3fffffff,r1
        !           869:        shar    $PGSHIFT,r1,r1
        !           870: 1:
        !           871:        orl3    $PG_V|PG_KW,r2,_Sysmap[r2]
        !           872:        aobleq  r1,r2,1b
        !           873: #
        !           874:  #     Map from here to last page used by user :
        !           875:  #     invalid, User access, & virtual = physical
        !           876: #
        !           877:        movl    r2,_unused      /* Save first unused physical page no   */
        !           878:        movl    r2,_Ufpte               /* First PTE of User */
        !           879:        movl    $0x80000,r1             /* Allow this much memory for User */
        !           880:        shar    $PGSHIFT,r1,r1
        !           881:        movl    r1,_Ulpte               /* Last PTE of User */
        !           882: 
        !           883: 1:
        !           884:        orl3    $PG_V|PG_UW,r2,_Sysmap[r2]      /* Valid / User Read/Write */
        !           885:        aoblss  r1,r2,1b
        !           886: 
        !           887: #
        !           888:  #     Initialize SBR, SLR
        !           889: #
        !           890: sysrdy:
        !           891:        mtpr    $_Sysmap,$SBR                   /* Set SYSTEM BASE REG */
        !           892:        mtpr    $_Syssize,$SLR
        !           893:        mtpr    $64,$DCR                        /* Enable fault */
        !           894: 
        !           895:  #             GO TO VIRTUAL MODE
        !           896:  #     Double map the kernel into user addresses : 
        !           897:  #     This will enable system to go to virtual mode the 1st time !!
        !           898: #
        !           899: 
        !           900:        orl3    $0xc0000000,$_Sysmap,r0 
        !           901:        mtpr    r0,$P0BR                /* Double map P0BR to SBR */
        !           902:        mtpr    $_Syssize,$P0LR
        !           903:        mtpr    $1,$PADC                /* Purge all data cache */
        !           904:        mtpr    $1,$TBIA                /* Purge all Trans. buffer */
        !           905:        
        !           906:        mfpr    $SCBB,r0
        !           907:        movab   _Trans,TRANSVEC(r0)     /* Set new trans. fault handler */
        !           908:        movab   _Prvis,PRIVSVEC(r0)     /* Set new priv. ins. fault handler */
        !           909:        moval   _FPM_handler,FPMVEC(r0) /* Set now fpm trap handler */
        !           910:        mtpr    $_pcb0,$0xe             /* Init. PCBB to PCB_0 */
        !           911:        
        !           912:        movab   _pcb0,r0
        !           913:        movab   ekstack,PCB_KSP(r0)     /* Init. PCB_KSP             */
        !           914:        movab   eustack,PCB_USP(r0)     /* Init. PCB_USP             */
        !           915:        mfpr    $P0BR,PCB_P0BR(r0)      /*  "    PCB_P0BR            */
        !           916:        mfpr    $P0LR,PCB_P0LR(r0)      /*  "    PCB_P0LR            */
        !           917:        movl    $0x001f000,PCB_PSL(r0)  /* Set PCB_PSL : Kernel Mode */
        !           918:        ldpctx                          /* load the process context  */
        !           919: 
        !           920:        mtpr    $1,$PACC                /* purge the code cache      */
        !           921:        movl    $1,_Codek
        !           922:        mtpr    _Codek,$CCK             /* Set code cache key        */
        !           923: 
        !           924:        callf   $4,_monitor             /* go execute the test       */
        !           925: 
        !           926: 
        !           927: #include       "fault_handlers.s"      /* put spectial handlers here */
        !           928: 
        !           929: 
        !           930:  # /****************************************************************************
        !           931:  # *                   STACK AREA
        !           932:  # ****************************************************************************/
        !           933: 
        !           934:        .globl  _Esys                   /* end of systems only code */
        !           935: _Esys:
        !           936:        .space  NBPG
        !           937:        
        !           938:        .globl  _Ustack                 /* basic stack space */
        !           939: _Ustack:
        !           940:        .space  (2*NBPG)-4              /* 2 pages */
        !           941:        .globl  eustack
        !           942: eustack:
        !           943:        .long   0                       /* initial user stack ptr */
        !           944: 
        !           945:        .globl  U_area
        !           946: U_area:
        !           947: 

unix.superglobalmegacorp.com

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