Annotation of cci/d/io/ioboth.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    P1CC,21                 /*purge (invalidate) one page   */
        !            30:                                        /*of code cache                 */
        !            31:        .set    PACC,23                 /*purge (invalidate) all pages  */
        !            32:                                        /*of process in code cache      */
        !            33:        .set    P1DC,24                 /*purge one page of data cache  */
        !            34:        .set    PADC,25                 /*purge all the pages of        */
        !            35:                                        /*process in data cache         */
        !            36:        .set    HISR,26                 /* Hardware interrupt summary reg  */
        !            37: 
        !            38:        
        !            39: 
        !            40:        .set    PSL_C,0x00000001        /* carry bit */
        !            41:        .set    PSL_V,0x00000002        /* overflow bit */
        !            42:        .set    PSL_Z,0x00000004        /* zero bit */
        !            43:        .set    Z,0x00000004
        !            44:        .set    PSL_N,0x00000008        /* negative bit */
        !            45:        .set    PSL_T,0x00000010        /* trace enable bit */
        !            46:        .set    PSL_I,0x00000020        /* integer overflow enable bit */
        !            47:        .set    PSL_IPL,0x001f0000      /* interrupt priority level */
        !            48:        .set    PSL_MOD,0x01000000      /* mode = 1 means user*/
        !            49:        .set    PSL_IS,0x04000000       /* interrupt stack */
        !            50:        .set    PSL_TP,0x40000000       /* trace pending */
        !            51: 
        !            52:        .set    PG_V,0x80000000
        !            53:        .set    PG_PROT,0x78000000
        !            54:        .set    PG_M,0x04000000
        !            55:        .set    PG_USED,0x02000000
        !            56:        .set    PG_NC,0x01000000
        !            57:        .set    PG_PFNUM,0x003fffff
        !            58: 
        !            59:        .set    PG_NOACC,0
        !            60:        .set    PG_KR,0x40000000
        !            61:        .set    PG_KW,0x60000000
        !            62:        .set    PG_URKR,0x50000000
        !            63:        .set    PG_URKW,0x70000000
        !            64:        .set    PG_UW,0x78000000
        !            65: 
        !            66: /*     PCB offsets & diagnostic extension to pcb                       */
        !            67: 
        !            68:        
        !            69:        .set    PCB_KSP,        0
        !            70:        .set    PCB_USP,        4
        !            71:        .set    PCB_R0,         8
        !            72:        .set    PCB_R1,         12
        !            73:        .set    PCB_R2,         16
        !            74:        .set    PCB_R3,         20
        !            75:        .set    PCB_R4,         24
        !            76:        .set    PCB_R5,         28
        !            77:        .set    PCB_R6,         32
        !            78:        .set    PCB_R7,         36
        !            79:        .set    PCB_R8,         40
        !            80:        .set    PCB_R9,         44
        !            81:        .set    PCB_R10,        48
        !            82:        .set    PCB_R11,        52
        !            83:        .set    PCB_R12,        56
        !            84:        .set    PCB_R13,        60
        !            85:        .set    PCB_PC,         64
        !            86:        .set    PCB_PSL,        68
        !            87:        .set    PCB_P0BR,       72
        !            88:        .set    PCB_P0LR,       76
        !            89:        .set    PCB_P1BR,       80
        !            90:        .set    PCB_P1LR,       84
        !            91:        .set    PCB_P2BR,       88
        !            92:        .set    PCB_P2LR,       92
        !            93:        .set    PCB_STAT,       96      /*process status,statistics,id,etc*/
        !            94: 
        !            95: 
        !            96: 
        !            97: /*     fundamental constants                                           */
        !            98: 
        !            99: 
        !           100:        .set    NBPG,1024
        !           101:        .set    PGOFSET,(NBPG-1)        /* byte offset into page */
        !           102:        .set    PGSHIFT,10              /* LOG2(NBPG) */
        !           103:        .set    HIGH,0x1f
        !           104:        .set    PAGE,1024
        !           105: 
        !           106: 
        !           107: /*     SCB offsets                                                     */
        !           108: 
        !           109:        .set    PFVEC,4                 /*power fail                    */
        !           110:        .set    CLOCKVEC,28             /*hard clock vector             */
        !           111:        .set    CRVEC,40                /*console receive               */
        !           112:        .set    CXVEC,44                /*console transmit              */
        !           113:        .set    SIVEC1,120              /*software int vec #1           */
        !           114:                                        /*for 2,3,..15, sub 4,8,.. 56   */
        !           115:                                        /*from SIVEC1                   */      
        !           116:        .set    BEVEC,128               /*bus error                     */      
        !           117:        .set    SYSVEC,172              /*system call (kcall)           */
        !           118:        .set    PINSTVEC,176            /*privileged instruction fault  */
        !           119:        .set    ROVEC,180               /*reserved operand fault        */
        !           120:        .set    RAVEC,184               /*reserved addressing fault     */
        !           121:        .set    PROTVEC,188             /*access control violation      */
        !           122:        .set    TRANSVEC,192            /*translation fault vector      */
        !           123:        .set    KSPVEC,196              /*kernel stack not valid vector */
        !           124:        .set    TRACEVEC,200            /*trace vector                  */
        !           125:        .set    BPTVEC,204              /*break point fault             */
        !           126:        .set    ARITHVEC,208            /*arithmetic trap               */
        !           127:        .set    ALIGNVEC,212            /*alignment vector              */      
        !           128:        .set    IO14VEC,256             /*io vector, ipl #14            */
        !           129:        .set    IO15VEC,320             /*io vector, ipl #15            */
        !           130:        .set    IO16VEC,384             /*io vector, ipl #16            */
        !           131:        .set    IO17VEC,448             /*io vector, ipl #17            */
        !           132: 
        !           133: /*     SPT (system page table) offsets                                 */
        !           134: 
        !           135:        .set    SCBPTE,8                /*system control block pte offset*/
        !           136:        .set    BUFPTE,12               /*buffer pte offset             */
        !           137:        .set    ISPTE,16                /*interrupt stack page 0        */
        !           138:        .set    IS1PTE,20               /*interrupt stack page 1        */
        !           139:        .set    SPTPTE,20               /*system page table page 1      */
        !           140:        .set    SPT1PTE,20              /*system page table page 2      */
        !           141:        .set    IOMAPPTE,24             /*io map                        */
        !           142:        .set    PCBPTE,28               /*process control blocks pte    */
        !           143:        .set    U0P0PTE,32              /*U0 p0pt pte                   */
        !           144:        .set    U0P1PTE,36              /*U0 p1pt pte                   */
        !           145:        .set    U0P2PTE,40              /*U0 p2pt pte                   */
        !           146:        .set    U1P0PTE,44
        !           147:        .set    U1P1PTE,48
        !           148:        .set    U1P2PTE,52
        !           149:        .set    U2P0PTE,56
        !           150:        .set    U2P1PTE,60
        !           151:        .set    U2P2PTE,64
        !           152:        .set    U3P0PTE,68
        !           153:        .set    U3P1PTE,72
        !           154:        .set    U3P2PTE,76
        !           155:        .set    U4P0PTE,80
        !           156:        .set    U4P1PTE,84
        !           157:        .set    U4P2PTE,88
        !           158:        .set    U5P0PTE,92
        !           159:        .set    U5P1PTE,96
        !           160:        .set    U5P2PTE,100
        !           161:        .set    U6P0PTE,104
        !           162:        .set    U6P1PTE,108
        !           163:        .set    U6P2PTE,112
        !           164:        .set    U7P0PTE,116             /*U7 p0pt pte                   */
        !           165:        .set    U7P1PTE,120             /*U7 p1pt pte                   */
        !           166:        .set    U7P2PTE,124             /*U7 p2pt pte                   */
        !           167:        .set    IOB0PTE,128             /*io buffer 0 pte               */
        !           168:        .set    IOB1PTE,132
        !           169:        .set    IOB2PTE,136
        !           170:        .set    IOB3PTE,140
        !           171:        .set    IOB4PTE,144
        !           172:        .set    IOB5PTE,148
        !           173:        .set    IOB6PTE,152
        !           174:        .set    IOB7PTE,156             /*io buffer 7 pte               */
        !           175: 
        !           176: 
        !           177: /*     trap.h  4.6     81/03/03        */
        !           178: 
        !           179: 
        !           180:        .set    RESADFLT,0              /* reserved addressing fault */
        !           181:        .set    PRIVINFLT,1             /* privileged instruction fault */
        !           182:        .set    RESOPFLT,2              /* reserved operand fault */
        !           183:        .set    BPTFLT,3                /* bpt instruction fault */
        !           184:        .set    ALIGNFLT,4              /* alignment fault */
        !           185:        .set    SYSCALL,5               /* kcall instruction (syscall trap) */
        !           186:        .set    ARITHTRAP,6             /* arithmetic trap */
        !           187:        .set    PROTFLT,7               /* protection fault */
        !           188:        .set    TRCTRAP,8               /* trace trap */
        !           189:        .set    TRANSFLT,9              /* translation not valid fault */
        !           190:        .set    DONE,255
        !           191:        .set    CPMDCB,21
        !           192:        .set    PDCS,28
        !           193:        .set    ISTK,0x10000
        !           194:        .globl  _ioboth
        !           195:        .set    SYSP,0x20000
        !           196:        .set    SSP,0x30000
        !           197:        .set    CPCONS,0x01
        !           198:        .set    CPWRITE,0x01
        !           199:        .set    CLOCKVEC,28             /*hard clock vector             */
        !           200:        .set    RRVEC,48                /*remote receive                */
        !           201:        .set    RXVEC,52                /*remote transmit               */
        !           202:        .set    CPRMTE,0x02
        !           203:        .set    CPWRITE,0x01
        !           204:        .set    CPREAD,0x02
        !           205:        .set    RDONE,0x4000
        !           206:        .set    TIME,0x0fffffff
        !           207:        .set    BFSZ,0x01
        !           208:        .set    A,0x41
        !           209:        .set    a,0x61
        !           210:        .set    Z,0x5a
        !           211:        .set    z,0x7a
        !           212: 
        !           213: 
        !           214: /* Local and Remote console output test   */
        !           215: 
        !           216: 
        !           217: _ioboth:movl   $0x00,r1
        !           218:        movab   bitbl,r0
        !           219: lvec:  movl    r0,_scb [r1]
        !           220:        addl2   $4,r0
        !           221:        addl2   $1,r1
        !           222:        cmpl    $0xff,r1
        !           223:        jneq    lvec
        !           224:        movb    $A,ucase        /* load starting value of upper case */
        !           225:        movb    $a,lcase        /* load starting value of lower case */
        !           226:        mtpr    $_scb,$SCBB     /* initialize SCBB */
        !           227:        movl    $SSP,sp         /* initialize system stack pointer */
        !           228:        movab   liint,_scb + CRVEC      /* addr rx interrupt routine */
        !           229:        movab   loint,_scb + CXVEC      /* addr tx interrupt routine */
        !           230:        movab   riint,_scb + RRVEC      /* addr rrx interrupt routine */
        !           231:        movab   roint,_scb + RXVEC      /* addr rtx interrupt routine */
        !           232:        movab   clkint,_scb + CLOCKVEC
        !           233: 
        !           234:        movab   LIDCB,r7
        !           235:        movb    $CPCONS,0(r7)   /* set up CPDCB for console */
        !           236:        movb    $CPREAD,1(r7)
        !           237:        movw    $BFSZ,2(r7)
        !           238:        movb    $0,4(r7)
        !           239:        mtpr    r7,$CPMDCB      /* send read interrupt to cp */
        !           240: ili:   mtpr    r7,$PDCS
        !           241:        movw    0(r7),r8        /* read CP command word */
        !           242:        andw2   $RDONE,r8       /* check buffer read is done */
        !           243:        jeql    ili             /* not done check again */
        !           244:        movab   RIDCB,r7
        !           245:        movb    $CPRMTE,0(r7)   /* set up CPDCB for remote */
        !           246:        movb    $CPREAD,1(r7)
        !           247:        movw    $BFSZ,2(r7)
        !           248:        movb    $0,4(r7)
        !           249:        mtpr    r7,$CPMDCB      /* send read interrupt to cp */
        !           250: iri:   mtpr    r7,$PDCS
        !           251:        movw    0(r7),r8        /* read CP command word */
        !           252:        andw2   $RDONE,r8       /* check buffer read is done */
        !           253:        jeql    iri             /* not done check again */
        !           254:        movab   LODCB,r7
        !           255:        movb    $CPCONS,0(r7)   /* set up CPDCB for console */
        !           256:        movb    $CPWRITE,1(r7)
        !           257:        movw    $BFSZ,2(r7)
        !           258:        movb    ucase,4(r7)     /* load upper case character to xmit */
        !           259:        mtpr    r7,$CPMDCB      /* send xmit interrupt to cp */
        !           260: ilo:   mtpr    r7,$PDCS
        !           261:        movw    0(r7),r8        /* read CP command word */
        !           262:        andw2   $RDONE,r8       /* check buffer read is done */
        !           263:        jeql    ilo             /* not done check again */
        !           264:        movab   RODCB,r7
        !           265:        movb    $CPRMTE,0(r7)   /* set up CPDCB for remote */
        !           266:        movb    $CPWRITE,1(r7)
        !           267:        movw    $BFSZ,2(r7)
        !           268:        movb    lcase,4(r7)     /* load lower case character to xmit */
        !           269:        mtpr    r7,$CPMDCB      /* send xmit interrupt to cp */
        !           270: iro:   mtpr    r7,$PDCS
        !           271:        movw    0(r7),r8        /* read CP command word */
        !           272:        andw2   $RDONE,r8       /* check buffer read is done */
        !           273:        jeql    iro             /* not done check again */
        !           274: 
        !           275:        clrl    r6
        !           276: loop:  tstl    r6
        !           277:        jneq    loopc
        !           278:        movl    $0x1f,r6
        !           279: loopc: mtpr    r6,$IPL         /* lower ipl to allow all interrupts */
        !           280:        decl    r6
        !           281:        jmp     loop            /* jump self to transmit characters */
        !           282: tdone: movl    $0xCAFEBABE,r0  /* good test    */
        !           283:        halt
        !           284: 
        !           285: liint: mfpr    $CPMDCB,r5
        !           286:        mtpr    r5,$PDCS
        !           287:        movw    (r5),r4         /* read CP command word */
        !           288:        andw2   $RDONE,r4       /* check buffer read is done */
        !           289:        jeql    liint           /* not done check again */
        !           290:        movab   LIDCB,r5
        !           291:        movb    $CPCONS,(r5)    /* set up CPDCB for console */
        !           292:        movb    $CPREAD,1(r5) 
        !           293:        movab   4(r5),r4
        !           294:        mtpr    r4,$PDCS
        !           295:        movb    4(r5),ucase
        !           296:        movb    $0,4(r5)
        !           297:        movb    ucase,r4        /* get character read   */
        !           298:        andl2   $127,r4         /* mask parity          */
        !           299:        cmpl    $4,r4           /* check for control d  */
        !           300:        jeql    tdone           /* yes--all done        */
        !           301:        mtpr    r5,$CPMDCB      /* send read interrupt to cp */
        !           302: liret: rei
        !           303: 
        !           304: loint: mfpr    $CPMDCB,r5
        !           305:        mtpr    r5,$PDCS
        !           306:        movw    (r5),r4         /* read CP command word */
        !           307:        andw2   $RDONE,r4       /* check buffer read is done */
        !           308:        jeql    loint           /* not done check again */
        !           309:        movab   LODCB,r5
        !           310:        movb    $CPCONS,(r5)    /* set up dcb for console */
        !           311:        movb    ucase,4(r5)     /* load character to xmit */
        !           312:        mtpr    r5,$CPMDCB      /* issue " go " command */
        !           313: loret: rei
        !           314: 
        !           315: riint: mfpr    $CPMDCB,r5
        !           316:        mtpr    r5,$PDCS
        !           317:        movw    (r5),r4         /* read CP command word */
        !           318:        andw2   $RDONE,r4       /* check buffer read is done */
        !           319:        jeql    riint           /* not done check again */
        !           320:        movab   RIDCB,r5
        !           321:        movb    $CPRMTE,(r5)    /* set up CPDCB for remote */
        !           322:        movb    $CPREAD,1(r5)
        !           323:        movab   4(r5),r4
        !           324:        mtpr    r4,$PDCS
        !           325:        movb    4(r5),lcase
        !           326:        movb    $0,4(r5)
        !           327:        mtpr    r5,$CPMDCB      /* send read interrupt to cp */
        !           328:        movl    lcase,r4        /* get character read   */
        !           329:        andl2   $127,r4         /* mask parity          */
        !           330:        cmpl    $4,r4           /* check for control d  */
        !           331:        jeql    tdone           /* yes--all done        */
        !           332: riret: rei
        !           333: 
        !           334: roint: mfpr    $CPMDCB,r5
        !           335:        mtpr    r5,$PDCS
        !           336:        movw    (r5),r4         /* read CP command word */
        !           337:        andw2   $RDONE,r4       /* check buffer read is done */
        !           338:        jeql    roint           /* not done check again */
        !           339:        movab   RODCB,r5
        !           340:        movb    $CPRMTE,(r5)    /* set up dcb for console */
        !           341:        movb    lcase,4(r5)     /* load character to xmit */
        !           342:        mtpr    r5,$CPMDCB      /* issue " go " command */
        !           343: roret: rei
        !           344: 
        !           345: clkint:        rei                     /* dummy routine to handle clock int */
        !           346:        .data
        !           347: _scb:
        !           348:        .space 1024
        !           349: 
        !           350: bitbl:
        !           351:        .space 1024
        !           352: 
        !           353:        .align 2
        !           354: LIDCB:
        !           355:        .space 20
        !           356: 
        !           357:        .align 2
        !           358: LODCB:
        !           359:        .space 20
        !           360: 
        !           361:        .align 2
        !           362: RIDCB:
        !           363:        .space 20
        !           364: 
        !           365:        .align 2
        !           366: RODCB:
        !           367:        .space 20
        !           368: 
        !           369:        .align 2
        !           370: 
        !           371: ucase: .space 4
        !           372: 
        !           373: lcase: .space 4

unix.superglobalmegacorp.com

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