|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.