Annotation of lucent/sys/src/9/gnot/l.s, revision 1.1.1.1

1.1       root        1: #include "mem.h"
                      2: 
                      3: #define        DBMAGIC         0xBADC0C0A
                      4: 
                      5: /*
                      6:  * Boot first processor
                      7:  */
                      8: TEXT   start(SB), $-4
                      9: 
                     10:        MOVW    $(SUPER|SPL(7)), SR
                     11:        MOVL    $a6base(SB), A6
                     12:        MOVL    $0, R0
                     13:        MOVL    R0, CACR
                     14:        MOVL    R0, TACADDR             /* zero tac counter (cause an intr?) */
                     15: 
                     16:        MOVL    $mach0(SB), A0
                     17:        MOVL    A0, m(SB)
                     18:        MOVL    $0, 0(A0)
                     19:        MOVL    A0, A7
                     20:        ADDL    $(MACHSIZE-4), A7       /* start stack under machine struct */
                     21:        MOVL    $0, u(SB)
                     22: 
                     23:        MOVL    $vectors(SB), A0
                     24:        MOVL    A0, VBR
                     25: 
                     26:        BSR     main(SB)
                     27:        /* never returns */
                     28: dead:
                     29:        BRA     dead
                     30: 
                     31: /*
                     32:  * Take first processor into user mode.  Leave enough room on the kernel stack
                     33:  * for a full-sized Ureg (including long bus error format) to fit
                     34:  *     - argument is stack pointer to user
                     35:  */
                     36: 
                     37: TEXT   touser(SB), $0
                     38: 
                     39:        MOVL    usp+0(FP), A0
                     40:        MOVL    $(USERADDR+BY2PG-UREGVARSZ), A7
                     41:        MOVW    $0, -(A7)
                     42:        MOVL    $(UTZERO+32), -(A7)     /* header is in text */
                     43:        MOVW    $0, -(A7)
                     44:        MOVL    A0, USP
                     45:        MOVW    $(SUPER|SPL(0)), SR
                     46:        MOVL    $8, R0
                     47:        MOVL    R0, CACR
                     48:        RTE
                     49: 
                     50: TEXT   firmware(SB), $0
                     51: 
                     52:        MOVL    $0x40000090, A0
                     53:        JMP     (A0)
                     54: 
                     55: TEXT   splhi(SB), $0
                     56: 
                     57:        MOVL    m(SB), A0
                     58:        MOVL    (A7), 4(A0)
                     59:        MOVL    $0, R0
                     60:        MOVW    SR, R0
                     61:        MOVW    $(SUPER|SPL(7)), SR
                     62:        RTS
                     63: 
                     64: TEXT   splduart(SB), $0
                     65: 
                     66:        MOVL    $0, R0
                     67:        MOVW    SR, R0
                     68:        MOVW    $(SUPER|SPL(5)), SR
                     69:        RTS
                     70: 
                     71: TEXT   spllo(SB), $0
                     72: 
                     73:        MOVL    $0, R0
                     74:        MOVW    SR, R0
                     75:        MOVW    $(SUPER|SPL(0)), SR
                     76:        RTS
                     77: 
                     78: TEXT   splx(SB), $0
                     79: 
                     80:        MOVL    sr+0(FP), R0
                     81:        MOVW    R0, SR
                     82:        RTS
                     83: 
                     84: TEXT   spldone(SB), $0
                     85: 
                     86:        RTS
                     87: 
                     88: TEXT   spl1(SB), $0
                     89: 
                     90:        MOVL    $0, R0
                     91:        MOVW    SR, R0
                     92:        MOVW    $(SUPER|SPL(1)), SR
                     93:        RTS
                     94: 
                     95: TEXT   flushcpucache(SB), $0
                     96: 
                     97:        MOVL    $(CCLEAR|CENABLE), R0
                     98:        MOVL    R0, CACR
                     99:        RTS
                    100: 
                    101: TEXT   cacrtrap(SB), $0        /* user entry point to control cache, e.g. flush */
                    102: 
                    103:        MOVL    R0, CACR
                    104:        RTE
                    105: 
                    106: TEXT   setlabel(SB), $0
                    107: 
                    108:        MOVL    sr+0(FP), A0
                    109:        MOVL    A7, (A0)+               /* stack pointer */
                    110:        MOVL    (A7), (A0)+             /* pc of caller */
                    111:        MOVW    SR, (A0)+               /* status register */
                    112:        CLRL    R0                      /* ret 0 => not returning */
                    113:        RTS
                    114: 
                    115: TEXT   gotolabel(SB), $0
                    116: 
                    117:        MOVL    p+0(FP), A0
                    118:        MOVW    $(SUPER|SPL(7)), SR
                    119:        MOVL    (A0)+, A7               /* stack pointer */
                    120:        MOVL    (A0)+, (A7)             /* pc; stuff into stack frame */
                    121:        MOVW    (A0)+, R0               /* status register */
                    122:        MOVW    R0, SR
                    123:        MOVL    $1, R0                  /* ret 1 => returning */
                    124:        RTS
                    125: 
                    126: /*
                    127:  * Test and set, as a subroutine
                    128:  */
                    129: 
                    130: TEXT   tas(SB), $0
                    131: 
                    132:        MOVL    $0, R0
                    133:        MOVL    a+0(FP), A0
                    134:        TAS     (A0)
                    135:        BEQ     tas_1
                    136:        MOVL    $1, R0
                    137: tas_1:
                    138:        RTS
                    139: 
                    140: /*
                    141:  * Floating point
                    142:  */
                    143: 
                    144: TEXT   fpsave(SB), $0
                    145: 
                    146:        FSAVE   (fp+0(FP))
                    147:        RTS
                    148: 
                    149: TEXT   fprestore(SB), $0
                    150: 
                    151:        FRESTORE        (fp+0(FP))
                    152:        RTS
                    153: 
                    154: TEXT   fpregsave(SB), $0
                    155: 
                    156:        FMOVEM  $0xFF, (3*4)(fr+0(FP))
                    157:        FMOVEMC $0x7, (fr+0(FP))
                    158:        RTS
                    159: 
                    160: TEXT   fpregrestore(SB), $0
                    161: 
                    162:        FMOVEMC (fr+0(FP)), $0x7
                    163:        FMOVEM  (3*4)(fr+0(FP)), $0xFF
                    164:        RTS
                    165: 
                    166: TEXT   fpcr(SB), $0
                    167: 
                    168:        MOVL    new+0(FP), R1
                    169:        MOVL    FPCR, R0
                    170:        MOVL    R1, FPCR
                    171:        RTS
                    172: 
                    173: TEXT   rfnote(SB), $0
                    174: 
                    175:        MOVL    uregp+0(FP), A7
                    176:        MOVL    ((8+8)*BY2WD)(A7), A0
                    177:        MOVL    A0, USP
                    178:        MOVEM   (A7), $0x7FFF
                    179:        ADDL    $((8+8+1+1)*BY2WD), A7
                    180:        RTE
                    181: 
                    182: TEXT   illegal(SB), $0
                    183: 
                    184:        MOVL    $DBMAGIC, -(A7)
                    185:        SUBL    $((8+8+1)*BY2WD), A7
                    186:        MOVEM   $0x7FFF, (A7)
                    187:        MOVL    $a6base(SB), A6
                    188:        MOVL    USP, A0
                    189:        MOVL    A0, ((8+8)*BY2WD)(A7)
                    190:        MOVL    A7, -(A7)
                    191:        BSR     trap(SB)
                    192:        ADDL    $4, A7
                    193:        MOVL    ((8+8)*BY2WD)(A7), A0
                    194:        MOVL    A0, USP
                    195:        MOVEM   (A7), $0x7FFF
                    196:        ADDL    $((8+8+1)*BY2WD), A7
                    197:        MOVL    $0, (A7)+
                    198:        RTE
                    199: 
                    200: TEXT   systrap(SB), $0
                    201: 
                    202:        MOVL    $DBMAGIC, -(A7)
                    203:        SUBL    $((8+8+1)*BY2WD), A7
                    204:        MOVL    A6, ((8+6)*BY2WD)(A7)
                    205:        MOVL    R0, (A7)
                    206:        MOVL    $a6base(SB), A6
                    207:        MOVL    USP, A0
                    208:        MOVL    A0, ((8+8)*BY2WD)(A7)
                    209:        MOVL    A7, -(A7)
                    210:        BSR     syscall(SB)
                    211:        MOVL    ((1+8+8)*BY2WD)(A7), A0
                    212:        MOVL    A0, USP
                    213:        MOVL    ((1+8+6)*BY2WD)(A7), A6
                    214:        ADDL    $((1+8+8+1)*BY2WD), A7
                    215:        MOVL    $0, (A7)+
                    216:        RTE
                    217: 
                    218: TEXT   buserror(SB), $0
                    219: 
                    220:        MOVL    $DBMAGIC, -(A7)
                    221:        SUBL    $((8+8+1)*BY2WD), A7
                    222:        MOVEM   $0x7FFF, (A7)
                    223:        MOVL    $a6base(SB), A6
                    224:        MOVL    USP, A0
                    225:        MOVL    A0, ((8+8)*BY2WD)(A7)
                    226:        PEA     ((8+8+1+3)*BY2WD)(A7)
                    227:        PEA     4(A7)
                    228:        BSR     fault68020(SB)
                    229:        ADDL    $8, A7
                    230:        MOVL    ((8+8)*BY2WD)(A7), A0
                    231:        MOVL    A0, USP
                    232:        MOVEM   (A7), $0x7FFF
                    233:        ADDL    $((8+8+1)*BY2WD), A7
                    234:        MOVL    $0, (A7)+
                    235:        RTE
                    236: 
                    237: TEXT   tacintr(SB), $0                 /* level 1 */
                    238: 
                    239:        MOVL    R0, -(A7)
                    240:        MOVL    TACADDR, R0
                    241:        MOVL    (A7)+, R0
                    242:        RTE
                    243: 
                    244: TEXT   portintr(SB), $0                /* level 2 */
                    245: 
                    246:        MOVL    $DBMAGIC, -(A7)
                    247:        SUBL    $((8+8+1)*BY2WD), A7
                    248:        MOVEM   $0x7FFF, (A7)
                    249:        MOVL    $a6base(SB), A6
                    250:        MOVL    USP, A0
                    251:        MOVL    A0, ((8+8)*BY2WD)(A7)
                    252:        MOVL    A7, -(A7)
                    253:        BSR     devportintr(SB)
                    254:        BRA     retintr
                    255: 
                    256: TEXT   dkintr(SB), $0                  /* level 3 */
                    257: 
                    258:        MOVL    $DBMAGIC, -(A7)
                    259:        SUBL    $((8+8+1)*BY2WD), A7
                    260:        MOVEM   $0x7FFF, (A7)
                    261:        MOVL    $a6base(SB), A6
                    262:        MOVL    USP, A0
                    263:        MOVL    A0, ((8+8)*BY2WD)(A7)
                    264:        MOVL    A7, -(A7)
                    265:        BSR     inconintr(SB)
                    266:        BRA     retintr
                    267: 
                    268: TEXT   mouseintr(SB), $0               /* level 4 */
                    269: 
                    270:        MOVEM   $0x80C2, -(A7)          /* D0, A0, A1, A6 */
                    271:        MOVL    $a6base(SB), A6
                    272:        MOVL    $15, R0                 /* mask off hex switch */
                    273:        ANDB    MOUSE,R0                /* clears quadrature interrupt */
                    274:        LEA     mousetab(SB)(R0.W*8), A0
                    275:        LEA     mouse(SB), A1
                    276:        MOVL    (A0)+, R0
                    277:        ADDL    R0, (A1)+               /* dx */
                    278:        MOVL    (A0), R0
                    279:        ADDL    R0, (A1)+               /* dy */
                    280:        ADDL    $1, (A1)                /* track */
                    281:        MOVEM   (A7)+, $0x4301
                    282:        RTE
                    283: 
                    284: TEXT   uartintr(SB), $0                /* level 5 */
                    285: 
                    286:        MOVL    $DBMAGIC, -(A7)
                    287:        SUBL    $((8+8+1)*BY2WD), A7
                    288:        MOVEM   $0x7FFF, (A7)
                    289:        MOVL    $a6base(SB), A6
                    290:        MOVL    USP, A0
                    291:        MOVL    A0, ((8+8)*BY2WD)(A7)
                    292:        MOVL    A7, -(A7)
                    293:        BSR     duartintr(SB)
                    294:        BRA     retintr
                    295: 
                    296: TEXT   syncintr(SB), $0                /* level 6 */
                    297: 
                    298:        MOVL    $DBMAGIC, -(A7)
                    299:        SUBL    $((8+8+1)*BY2WD), A7
                    300:        MOVEM   $0x7FFF, (A7)
                    301:        MOVL    $a6base(SB), A6
                    302:        MOVL    USP, A0
                    303:        MOVL    A0, ((8+8)*BY2WD)(A7)
                    304:        MOVL    A7, -(A7)
                    305:        BSR     clock(SB)
                    306:        /* fall through */
                    307: retintr:
                    308:        ADDL    $4, A7
                    309:        MOVL    ((8+8)*BY2WD)(A7), A0
                    310:        MOVL    A0, USP
                    311:        MOVEM   (A7), $0x7FFF
                    312:        ADDL    $((8+8+1)*BY2WD), A7
                    313:        MOVL    $0, (A7)+
                    314:        RTE
                    315: 
                    316: GLOBL  duarttimer+0(SB),$4
                    317: 
                    318: TEXT   duartreadtimer+0(SB), $0
                    319:        MOVW    SR, R1          /* spl7() */
                    320:        MOVW    $0x2700, SR
                    321:        MOVL    $0x40100000, A0
                    322:        CLRL    R0
                    323:        TSTB    15(A0)          /* stop timer */
                    324:        MOVW    6(A0), R0       /* read hi,lo */
                    325:        TSTB    14(A0)          /* restart timer */
                    326:        NOTW    R0              /* timer counts down from 0xffff */
                    327:        ADDL    duarttimer(SB), R0
                    328:        MOVL    R0, duarttimer(SB)
                    329:        MOVW    R1, SR
                    330:        RTS
                    331: 
                    332: TEXT   getsr+0(SB), $0
                    333:        MOVL    $0, R0
                    334:        MOVW    SR, R0
                    335:        RTS
                    336: 
                    337: GLOBL  mousetab(SB), $128
                    338: DATA   mousetab+  0(SB)/4, -1          /* x down,        */
                    339: DATA   mousetab+  4(SB)/4,  1          /*         y up   */
                    340: DATA   mousetab+  8(SB)/4,  0          /* x -            */
                    341: DATA   mousetab+ 12(SB)/4,  1          /*         y up   */
                    342: DATA   mousetab+ 16(SB)/4,  1          /* x up           */
                    343: DATA   mousetab+ 20(SB)/4,  1          /*         y up   */
                    344: DATA   mousetab+ 24(SB)/4,  0          /* x  -           */
                    345: DATA   mousetab+ 28(SB)/4,  1          /*         y up   */
                    346: DATA   mousetab+ 32(SB)/4, -1          /* x down         */
                    347: DATA   mousetab+ 36(SB)/4,  0          /*         y -    */
                    348: DATA   mousetab+ 40(SB)/4,  0          /* x -            */
                    349: DATA   mousetab+ 44(SB)/4,  0          /*         y -    */
                    350: DATA   mousetab+ 48(SB)/4,  1          /* x up,          */
                    351: DATA   mousetab+ 52(SB)/4,  0          /*         y -    */
                    352: DATA   mousetab+ 56(SB)/4,  0          /* x -            */
                    353: DATA   mousetab+ 60(SB)/4,  0          /*         y -    */
                    354: DATA   mousetab+ 64(SB)/4, -1          /* x down         */
                    355: DATA   mousetab+ 68(SB)/4, -1          /*         y down */
                    356: DATA   mousetab+ 72(SB)/4,  0          /* x -            */
                    357: DATA   mousetab+ 76(SB)/4, -1          /*         y down */
                    358: DATA   mousetab+ 80(SB)/4,  1          /* x up           */
                    359: DATA   mousetab+ 84(SB)/4, -1          /*         y down */
                    360: DATA   mousetab+ 88(SB)/4,  0          /* x -            */
                    361: DATA   mousetab+ 92(SB)/4, -1          /*         y down */
                    362: DATA   mousetab+ 96(SB)/4, -1          /* x down         */
                    363: DATA   mousetab+100(SB)/4,  0          /*         y -    */
                    364: DATA   mousetab+104(SB)/4,  0          /* x -            */
                    365: DATA   mousetab+108(SB)/4,  0          /*         y -    */
                    366: DATA   mousetab+112(SB)/4,  1          /* x up           */
                    367: DATA   mousetab+116(SB)/4,  0          /*         y -    */
                    368: DATA   mousetab+120(SB)/4,  0          /* x -            */
                    369: DATA   mousetab+124(SB)/4,  0          /*         y -    */
                    370: 
                    371: GLOBL  mach0+0(SB), $MACHSIZE
                    372: GLOBL  u(SB), $4
                    373: GLOBL  m(SB), $4

unix.superglobalmegacorp.com

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