|
|
1.1 ! root 1: /* machdep.c 1.4 90/06/22 */ ! 2: ! 3: #include "tahoe/mem.h" ! 4: #include "tahoe/mtpr.h" ! 5: #include "tahoe/SYS.h" ! 6: ! 7: .set _scb, 0x0 ! 8: .set HIGH, 0x1f # mask for total disable ! 9: .set BERVEC, 0x80 # offset into scb of the bus error vector ! 10: .set RESTVEC, 0x8 # offset into scb of the restart vector ! 11: ! 12: ENTRY(mtpr, 0) ! 13: mtpr 8(fp),4(fp) ! 14: ret ! 15: ! 16: ENTRY(mfpr, 0) ! 17: mfpr 4(fp),r0 ! 18: ret ! 19: ! 20: ENTRY(bcopy, R2|R1|R0) ! 21: movl 4(fp),r0 ! 22: movl 8(fp),r1 ! 23: movl 12(fp),r2 ! 24: movblk ! 25: ret ! 26: ! 27: /* ! 28: * badaddr(addr, len) ! 29: * see if access addr with a len type instruction causes a machine check ! 30: * len is length of access (1=byte, 2=short, 4=long) ! 31: * r0 = 0 means good(exists); r0 =1 means does not exist. ! 32: */ ! 33: ENTRY(badaddr, R5|R4|R3|R2|R1) ! 34: mfpr $IPL,r1 ! 35: mtpr $HIGH,$IPL ! 36: mfpr $SCBB,r5 ! 37: mtpr $0,$SCBB ! 38: movl *$BERVEC,r2 ! 39: movl 4(fp),r3 ! 40: movl 8(fp),r4 ! 41: movab 9f,*$BERVEC ! 42: bbc $0,r4,1f; tstb (r3) ! 43: 1: bbc $1,r4,1f; tstw (r3) ! 44: 1: bbc $2,r4,1f; tstl (r3) ! 45: 1: clrl r0 # made it w/o machine checks ! 46: 2: movl r2,*$BERVEC ! 47: mtpr r1,$IPL ! 48: mtpr r5,$SCBB ! 49: ret ! 50: ! 51: /* ! 52: * wbadaddr(addr, len, value) ! 53: * see if write of value to addr with a len type instruction causes ! 54: * a machine check ! 55: * len is length of access (1=byte, 2=short, 4=long) ! 56: * r0 = 0 means good(exists); r0 =1 means does not exist. ! 57: */ ! 58: ENTRY(wbadaddr, R5|R4|R3|R2|R1) ! 59: mfpr $IPL,r1 ! 60: mtpr $HIGH,$IPL ! 61: mfpr $SCBB,r5 ! 62: mtpr $0,$SCBB ! 63: movl *$BERVEC,r2 ! 64: movl 4(fp),r3 ! 65: movl 8(fp),r4 ! 66: movab 9f,*$BERVEC ! 67: bbc $0,r4,1f; movb 15(fp), (r3) ! 68: 1: bbc $1,r4,1f; movw 14(fp), (r3) ! 69: 1: bbc $2,r4,1f; movl 12(fp), (r3) ! 70: 1: clrl r0 # made it w/o machine checks ! 71: 2: movl r2,*$BERVEC ! 72: mtpr r1,$IPL ! 73: mtpr r5,$SCBB ! 74: ret ! 75: ! 76: .align 2 ! 77: 9: # Here we catch buss error (if it comes) ! 78: andl3 4(sp),$ERRCD,r0 ! 79: cmpl r0,$APE ! 80: jneq 1f ! 81: halt # Address parity error !!! ! 82: 1: cmpl r0,$VBE ! 83: jneq 1f ! 84: halt # Versabus error ! 85: 1: ! 86: movl $1,r0 # Anything else = bad address ! 87: movab 8(sp),sp # discard buss error trash ! 88: movab 2b,(sp) # new program counter on stack. ! 89: rei ! 90: ! 91: ENTRY(movow, 0) ! 92: movow 10(fp),*4(fp) ! 93: ret ! 94: ! 95: ENTRY(movob, 0) ! 96: movob 11(fp),*4(fp) ! 97: ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.