From f35f3adc84614e62f9b4d89c2ac78b8a92d96d70 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Fri, 26 Jan 2018 19:49:52 +0100 Subject: [PATCH] PT - tests ITS pager. --- README.md | 1 + build/build.tcl | 7 + src/syseng/pt.2 | 2617 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2625 insertions(+) create mode 100755 src/syseng/pt.2 diff --git a/README.md b/README.md index 3177104f..6865cec8 100644 --- a/README.md +++ b/README.md @@ -229,6 +229,7 @@ A list of [known ITS machines](doc/machines.md). - PROBE, probe inside job and display various information about it. - PRUFD, list files on disk volume. - PSEND, super sender. + - PT, pager test. - PTY, pseudo-tty. - PWMAIL, a limited version of MAIL when not yet logged in under PWORD. - PWORD, replacement for sys;atsign hactrn that requires registered logins. diff --git a/build/build.tcl b/build/build.tcl index 7680d84e..8a640366 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -1240,6 +1240,13 @@ respond "*" ":midas sys3;ts create_syseng;create\r" expect ":KILL" respond "*" ":link sys1;ts plan,sys3;ts create\r" +respond "*" ":midas /t .;@ pt_syseng;pt\r" +respond "with ^C" "pi==4\r" +respond "\n" "tty==120\r" +respond "\n" "ptr==104\r" +respond "\n" "\003" +expect ":KILL" + # PTY respond "*" ":midas sys1;ts pty_sysen1;pty\r" expect ":KILL" diff --git a/src/syseng/pt.2 b/src/syseng/pt.2 new file mode 100755 index 00000000..d4e4dae7 --- /dev/null +++ b/src/syseng/pt.2 @@ -0,0 +1,2617 @@ +;RIM10 +TITLE PAGE TEST +;TEST WORD +;4.9 LOOP ON ERROR +;4.8 SUPPRESS TYPEOUT +;4.7 HOLD IN LOOP + +QT==0 ;QUANTUM TIMER TEST CODE SWITCH + + +A=1 +B=2 +C=3 +D=4 +E=5 +F=6 +FF=7 +LC=11 +T=12 +U1=13 +U2=14 +U3=15 +U4=16 +P=17 + +HIGHEST==3777777 ;TOP ABSOLUTE ADDRESS + +DDT=774000 + ;THIS PROGRAM DOESN'T TRY TO WIN FOR DDT > 400000 +X=PUSHJ P, +R=POPJ P, +J=JRST +M=MOVE +MI=MOVEI +MM=MOVEM + + +XCTR=103000,, ;XCT RELOCATED +LPM=102000,, +LPMR=LPM 2, ;CLEAR ASSOC MEM +LPMRI=LPM 6, ;LOAD, CLEAR ASSOC, AND GENERATE INTERRUPT +SPM=LPM 1, ;STORE STATE VECTOR +APRCHN==1 +ACTCHN==2 ;RANDOM CHNL TO ACTIVATE + +CLKON==2200+200_<-APRCHN> +CLKOFF==1000+200_<-APRCHN> +LSRMOD==10000 +IOTLSR==4000 +PURE==2000 +ONEPR==400 +BIS==20000 +PCBITS==776540 + +TPG=20000 ;START OF MEM PAGE TO USE FOR ASSOC MEM TST +TPG1=22000 ;OTHER PAGE +TPG2=24000 ;YET ANOTHER PAGE +IF2,[IFGE NEXPAG-TPG,[PRINTX /TPG TOO LOW-TRY AGAIN +/]] + +EXR==4 ;EXEC RELOCATE ABOVE 400000 + +RW==600000 ;READ WRITE PAGE +RWF==400000 ;READ WRITE FIRST +RO==200000 ;READ ONLY + +ERR==40000,, +ERRP==41000,, ;ERR PNT CAME OR CAMN MUST IMMED PRECEEDî +%TAG==42000,, ;STORE ASCII POINTER FOR ROUTINE NAME +BRANCH==43000,, ;GIVE ADDRESS TO TRANSFER TO ON INTERRUPT +TYPE==44000,, ;TYPE STRING POINTED TO BY ADDRESS + +XW==2 ;XCT RELOCATED WRITE +XR==1 ;READ +XRW==3 ;READ/WRITE +XRI==5 ;READ/INHIBIT INTERRUPTS +XWI==6 +XRWI==7 + +BAC==270400 ;AC FIELD + +DEFINE OUTSTR A +TYPE [.ASCII \A\] +TERMIN + +DEFINE ERRLUP A +TERMIN + + +DEFINE .ERR A/ +ERR [.ASCII ?A?] +TERMIN + +DEFINE TAG A/ +%TAG [ASCIZ ?A?] +TERMIN + +DEFINE INTCHECK +.ERR INTERRUPT DIDNT OCCUR +TERMIN + +DEFINE NEXT +JSR NEXTR +TERMIN + +ZZ=. + +LOC 41 + JSR UUOH +LOC 40+2*APRCHN + JSR APRBRK +LOC 40+2*ACTCHN + JSR 62 +LOC 63 + JRST 2,@62 +LOC 61 + JSR UUOH +LOC 77 +PASSS: 0 ;PASS COUNTER + +LOC ZZ + + +BEG: CONO 0 + MOVE A,[JSR UUOH] + MOVEM A,41 + CONO PI,10000 + CONO 637550 + LPMR NULPSW + SETZM INTLOC + MOVEI A,0 +BEGL1: ADDI A,40000 + CAM (A) + CONSO 10000 + CAIL A,-1 + SOJA A,.+2 + J BEGL1 + CONO 10000 + MOVEM A,MEMSIZ + MOVEI P,PDL-1 + SETZM DDTLOC' + MOVEI F,DDT +GOTDDT: SKIPN A,-1(F) + JRST GETDDT + CAIE A,-2(F) + JRST GETDDT + MOVEM F,DDTLOC +NODDT: + +BEGLUP: NEXT +;TEST BITS FOR LOADING AND STORING + CONO PI,16200+200_<-ACTCHN> + SETOM LMOD + MOVNI A,2 + MM A,XCTEM +ATL2E: PUSHJ P,LPSET ;SET UP ITERATION COUNTER +ATL2: CLEARM ERRF + MOVSI B,-8 +ATL2A: SKIPGE LMOD + PUSHJ P,RAND ;2ND PASS USE RANDOM CONTENTS + SKIPL LMOD + M A,XCTEM ;1ST PASS USE ISOLATED "0" BIT + MOVEM A,LP1(B) + AOBJN B,ATL2A + MOVSI B,-8 + MOVSI A,1 + IORM A,LP1+3 ;DONT LET Q.C. CHANGE +ATL2D: LPMR LP1 + SPM SP1 +ATL2B: MOVE A,LP1(B) + XOR A,SP1(B) + AND A,MSK1(B) + JUMPE A,ATL2C + MOVE C,LP1(B) + MOVE D,SP1(B) + HRRZ E,B + ERR [.ASCII ?LOADED *!C STORED *!D ERR *!A WD #!E +?] + OUTSTR [CONTINUE? ] +BADBIT: LPMR LP1 + SPM SP1 + MOVE A,SP1(B) + XOR A,LP1(B) + AND A,MSK1(B) + SKIPE A + AOS ERRCNT' + DATAO PI,ERRCNT + CONSO TTY,40 + JRST BADBIT + X TYI + CAIE A,"Y + JRST GIVEUP + X CRR +ATL2C: AOBJN B,ATL2D + DATAI A + SKIPGE ERRF + JUMPL A,ATL2D ;LOOP ON ERR + M A,XCTEM + ROT A,1 + MM A,XCTEM + SOJG LC,ATL2 + AOSG LMOD + J ATL2E + + +NEXT +TAG TESTING ADDRESS DATAPATH_ + +;SEE IF SIMPLE REFERENCES TO MAPPED ADDRESSES WORK + CONO PI,CLKOFF + MOVE A,[376,,MAP] + MOVEM A,DBR3 + MOVSI A,EXR+1 + MOVEM A,PSW+3 + MOVE A,[RO+TPG_-10.,,RO+TPG_-10.] + MOVEM A,MAP + MOVE A,[MAP,,MAP+1] + BLT A,MAP+NPAGES/2-1 + MOVE A,[-2000,,400000] + MOVEM A,TPG-400000(A) + AOBJN A,.-1 + LPMR PSW + MOVE A,400000 + JRST DATP2 + +DATPS1: REPEAT 10,JSP F,SKIP1 ;INCASE OF FAULT SKIPPING + +DATP2: CONSZ 60000 + JRST DATPR + CAMN A,[-2000,,400000] + JRST DATP1 + FOO==[-2000,,400000] + .ERR WRONG DATA REFERENCING 400000, C(ERR)=*!A _,C(400000)=*!FOO _ + JRST DATPR4 +DATP1: MOVE A,401777 + JRST DATP3 + +DATPS2: REPEAT 10,JSP F,SKIP2 + +DATP3: CONSZ 60000 + JRST DATPR + CAMN A,[-1,,401777] + JRST DATPE + FOO==[-1,,401777] + .ERR WRONG DATA REFERENCING 401777, C(ERR)=*!A _,C(401777)=*!FOO _ + JRST DATPR4 +DATPE: JRST AMEM + +DATPR: SPM SP1 + MOVEI F,0 + JRST DATPR1 + +SKIP2: SUBI F,DATPS2 + CAIA +SKIP1: SUBI F,DATPS1 + HRRZS F + SPM SP1 +DATPR1: ERR [.ASCII \FIRST PAGED REFERENCE FAULTED_BITS=\] + HLLZ C,SP1+3 + X TYPFLT + X CRR + SKIPE F + OUTSTR [PC SKIPPED #!F TIMES ] + OUTSTR [CONTINUE? ] +DATPR4: LPMR PSW + MOVE 400000 + JRST DATPR3 + REPEAT 10,JFCL + AOS ERRCNT + DATAO PI,ERRCNT +DATPR3: CONSO TTY,40 + JRST DATPR4 + X TYI + CAIE A,"Y + JRST GIVEUP + JRST AMEM + +;TEST ASSOCIATIVE PART OF A MEMORY +PSW: 0 ;(5-7)AGE (9-17)FAULT PAGE (18-35)JPC + 0 ;(5-17)OPC FLAGS (18-35)OPC + 0 ;(11-14)RING BUFFER COUNTER (15-17)MAR CONDITION (18-35)MAR + 1,,0 ;(7-17)FAULT STATUS (18-35)QUANTUM COUNTER +DBR1: 0 ;(5-10)OUTPUT PN 21-25 (11-16)DBR LENGTH (17-35)DBR USER 0 +DBR2: 0 ;(5-10)OUTPUT PN 16-20 (11-17)DBR LENGTH (17-35)DBR USER 1 +DBR3: 0 ; (11-17)DBR LENGTH (17-35)EXEC 400000 +ACP: 0 ;(7-11)B KEY[18-22] (12-16)C KEY (17-35)AC POINTER + +BRINGBF==250400,,2 +BFAULT==221300,,3 +B.AGE==340300 +B.AGE1==120300 +BCKEY: 300500,,PTS1+7 + 230500,,PTS1+7 + +FONPR==2000 +FFAULT==1000 ;IF ANY PAGE FAULT OCCURS +FNXM==400 +FDBL==200 +FRDO==100 ;WRITE INTO READ ONLY +FRWF==40 ;WRITE INTO READ WRITE FIRST +FPURE==20 ;PURE PC FETCH FROM 10 OR 11 PAGE +FNACC==10 +FMAR==2 + +NPAGES==256. +MAP: BLOCK NPAGES/2 +TEMPSW: BLOCK 10 +FILLTB: BLOCK 21 ;SUPPOSED CONTENTS OF ASSOCIATIVE REGISTERS + +AMEM: +NEXT +;This tests each associative register part of AMEM for matching the input + ;virtual address. It does this by noticing whether the correct + ; number of AR's have been loaded at each step. +;First it fills all AR's before the one under test with references to a series + ; of dummy pages. +;Then it makes a reference to the test page and checks that the AR under test was + ; filled. +;Then it references a "confusion" address that is different in one bit, and makes + ; sure that another AR was loaded. + +TAG TEST ASSOCIATIVE PART OF A MEMORY_ + MOVEI LC,0 + CONO PI,CLKOFF + MOVE A,[400000,,200] + MOVEM A,PN' ;EXEC 400000 + MOVE A,[525252,,525252] + MOVEM A,TPG+20 + MOVE A,[376,,MAP] + MOVEM A,DBR1 + MOVEM A,DBR2 + MOVEM A,DBR3 + MOVE A,[RO+TPG_-10.,,RO+TPG_-10.] + MOVEM A,MAP + MOVE A,[MAP,,MAP+1] + BLT A,MAP+NPAGES/2-1 + MOVEI A,EXR+1 + HRLZM A,PSW+3 +PAGLUP: SETZM RN' +REGLUP: MOVEI A,400000 + SKIPGE PN + LSH A,-1 ;DON'T TEST HIGH ORDER BIT FOR EXEC + MOVEM A,BIT' +BITLUP: LPMR PSW ;CLEAR OUT AR'S + SETZM N' + SETOM FILLCT' +FILLUP: MOVE A,RN + CAMN A,N ; FILLED ALL AR'S PREVIOUS TO ONE UNDER TEST? + JRST TESTN ;YES, TEST NTH ASSOC REGISTER + SKIPL PN + JRST FILLEX ;FILL UP WITH EXEC PAGES TYPES SO WON'T ASSOC WITH TEST PAGE + MOVE B,N + ADD B,PN + MOVEM B,TSTPAG' + LSH B,10. + XCTR XR,[MOVE A,20(B)] + JRST FILLED + +FILLEX: MOVE B,N + ADD B,PN + CAIL B,NPAGES + SUBI B,NPAGES/2 + CAIGE B,NPAGES/2 + ADDI B,NPAGES/2 + MOVEM B,TSTPAG' + LSH B,10. + MOVE A,20(B) +FILLED: MOVE B,TSTPAG + HLL B,PN + TLC B,400000 ;FILLED WITH OPPOSITE SENSE OF USER BIT AS TEST PAGE + AOS A,FILLCT + MOVEM B,FILLTB(A) + SPM TEMPSW + LDB A,[BRINGBF+TEMPSW] + AOS B,N + CAMN A,B + JRST FILLUP + MOVE B,TSTPAG + TLC B,400000 + MOVE C,N ;CORRECT STATE OF RING BUFFER PNTR +FILLERR: .ERR REFERENCE TO + SKIPL B + OUTSTR [USER PAGE NO #!B _] + SKIPGE B + OUTSTR [EXEC PAGE NO #!B _] + LDB D,[BRINGBF+TEMPSW] + OUTSTR [FILLED ASSOC RING BUFFER PNTR TO #!D INSTEAD OF #!C _] +FILLPNT: SKIPGE FILLCT + JRST AMERR + OUTSTR [ASSOC REG INTENDED CONTENTS_] + SETZB A,TEM' +FILLP1: OUTSTR [#!A ] + MOVE B,FILLTB(A) + SKIPGE B + OUTSTR [EXEC PAGE #!B _] + SKIPL B + OUTSTR [USER PAGE #!B _] + CAMGE A,FILLCT + AOJA A,FILLP1 + JRST AMERR + +TESTN: MOVE B,PN + LSH B,10. + SKIPL PN + XCTR XR,[MOVE A,20(B)] + SKIPGE PN + MOVE A,20(B) + SPM TEMPSW + MOVE E,RN + AOS E + ANDI E,17 + AOS A,FILLCT + MOVE C,PN + MOVEM C,FILLTB(A) + LDB D,[BRINGBF+TEMPSW] + CAMN D,E ;DID TEST REGISTER LOAD? + JRST TESTN1 ;YES, SEE IF ASSOCIATED CORRECTLY + MOVE B,PN + MOVE C,E + JRST FILLER +TESTN1: XOR B,BIT + SKIPL PN + XCTR XR,[MOVE A,20(B)] + SKIPGE PN + MOVE A,20(B) + SPM TEMPSW + LDB D,[BRINGBF+TEMPSW] + LSH B,-10. + HLL B,PN + AOS A,FILLCT + MOVEM B,FILLTB(A) + MOVE C,RN + ADDI C,2 + ANDI C,17 + CAME D,C + JRST FILLER +NEXBIT: MOVE A,BIT + LSH A,-1 + MOVEM A,BIT + TRNN A,1000 + JRST BITLUP + AOS A,RN + CAIGE A,20 + JRST REGLUP + AOS A,PN + HRRZS A + MOVE B,LC + DATAI C + ANDI C,7 + LSH B,(C) + CAIGE B,400 + CAIL A,NPAGES + JRST .+2 + AOJA LC,PAGLUP + SKIPL PN + JRST ATEST + MOVEI A,0 + MOVEM A,PN + JRST PAGLUP + +AMERR: OUTSTR [CONTINUE? ] +AMER1: LPMR PSW + MOVEI A,0 +AMER3: CAMG A,FILLCT + JRST AMER2 + CONSO TTY,40 + JRST AMER1 + X TYI + CAIE A,"Y + JRST GIVEUP + JRST NEXBIT + +AMER2: MOVE B,FILLTB(A) + HRRZ C,B + LSH C,10. + SKIPL B + XCTR XR,[MOVE D,20(C)] + SKIPGE B + MOVE D,20(C) + AOJA A,AMER3 + +;Fills AR with pointers to TPG +;Checks to see that the mapped area of memory can be referenced without refill. +;Checks that refill is needed for other areas of virtual memory. + +ATEST: NEXT + MOVEI A,0 + DPB A,[231200,,PTS1+7] ;CLEAR OUT B,C KEYS + MOVE A,[105105,,105105] + MOVEM A,TPG+20 ;SET UP 3 PGS WITH DIFFERENT QUANS +TESTW1==TPG+20 +TESTW2==TPG1+20 +TESTW3==TPG2+20 + EQVI A,0 + MOVEM A,TPG1+20 + MOVE A,[6969.6969] + MOVEM A,TPG2+20 + CLEARM LMOD + MOVEI A,400000+20 ;START TESTING EXEC ADDRESS 400000+ + MOVEM A,TADR + MOVE A,[376,,PTSPT1+100] + MOVEM A,PTS1+6 ;SET UP EXEC DBR + MOVSI A,EXR + IORM A,PTS1+3 + CLEARM PTS1+5 ;CLEAR OUT USER DBR + CLEARM PTS1+4 + MOVE A,[XCT D] ;NON RELOCATED XCT +ATLU1: MOVEM A,TINS + JRST ATL1BG + +CLRPGT: CLEARM PTSPT1 + MOVE A,[PTSPT1,,PTSPT1+1] + BLT A,PTSPT1+177 ;CLEAR OUT PG TBL + CLEARM OPPNR + POPJ P, + +ATL1BG: PUSHJ P,LPSET ;GET INTERATION COUNT +ATL1: CLEARM ERRF + X CLRPGT + LPMR PTS1 ;LD PAGE STATE VECTOR AND RESET ASSOC REG + MOVSI B,-16. ;TEST 16 ASSOC REGISTERS + SETZM REGNUM' + HRR B,TADR + MOVE D,[MOVE A,(B)] ;INST TO REF PAGED MEM + MOVEI U3,RO+TPG_-10. ;SET UP PAGE TBL TO PNT TO FIRST PG + PUSHJ P,PGCSET +ATL1A: XCT TINS + CAMN A,TPG+20 ;FIRST REF SHOULD FETCH PG ENTRY + JRST ATL1AA + .ERR REFERENCE TO + SKIPE LMOD + OUTSTR [USER ] + SKIPN LMOD + OUTSTR [EXEC ] + OUTSTR [ #!B THROUGH ASSOC REGISTER NO #!REGNUM FAILED_] + OUTSTR [ERROR=*!A , CORRECT=*!TESTW1 _] + SETOM ERRF + JRST ATLERR + +ATL1AA: ADDI B,1777 + AOS REGNUM + AOBJN B,ATL1A + +;TRY ADDRESSES THAT SHOULDN'T REFILL ASSSOC REGISTERS + + MOVSI B,-16. + HRR B,TADR + SETZM REGNUM + MOVE D,[MOVE A,(B)] + MOVEI U3,RO+TPG1_-10. ;CHNG PG TBL TO POINT TO NEW PG SHOULD CHNG ASSOC REG + PUSHJ P,PGCSET +ATL1B: XCT TINS + CAMN A,TPG+20 + JRST ATL1C + .ERR ASSOC REGISTER NO #!REGNUM FAILED TO KEEP OLD ASSOCIATION ON REFERENCE TO + SKIPE LMOD + OUTSTR [USER ] + SKIPN LMOD + OUTSTR [EXEC ] + OUTSTR [#!B _] + OUTSTR [C(ERR)=*!A _] + OUTSTR [C(OLD MAP)=*!TESTW1 _] + OUTSTR [C(NEW MAP)=*!TESTW2 _] + SETOM ERRF + JRST ATLERR + +ATL1C: ADDI B,1777 + AOS REGNUM + AOBJN B,ATL1B + +;TRY ADDRESSES THAT SHOULD REFILL + MOVE B,TADR + ADDI B,2000*16. + ANDI B,-1 + CAIL B,-40000 + SUBI B,100000 + SKIPE LMOD + JRST ATL1J + CAIGE B,400000 + ADDI B,400000 + HRRZM B,NEWTADR' +ATL1J: HRLI B,-16. + SETZM REGNUM + MOVE D,[MOVE A,(B)] + MOVEI U3,RO+TPG2_-10. + PUSHJ P,PGCSET +ATL1E: XCT TINS + CAMN A,TPG2+20 + JRST ATL1EA + HRRZ F,B + SUB F,NEWTADR + ADD F,TADR + .ERR ASSOC REGISTER NO #!REGNUM FAILED TO REFILL_ + OUTSTR [C(ERR)=*!A _] + OUTSTR [C(OLD ADDRESS=#!F )=*!TESTW1 _] + OUTSTR [C(NEW ADDRESS=#!B )=*!TESTW2 _] + SETOM ERRF + JRST ATLERR + +ATL1EA: ADDI B,1777 + AOS REGNUM + AOBJN B,ATL1E + + ;TRY ADDRESSES THAT SHOULD REFILL + + MOVSI B,-16. + HRR B,TADR + SETZM REGNUM + MOVE D,[MOVE A,(B)] + MOVEI U3,RO+TPG1_-10. + PUSHJ P,PGCSET +ATL1G: XCT TINS + CAMN A,TPG1+20 + JRST ATL1L + HRRZ F,B + SUB F,TADR + ADD F,NEWTADR + .ERR ASSOC REGISTER NO #!REGNUM FAILED TO REFILL _] + OUTSTR [C(ERR)=*!A _] + OUTSTR [C(OLD ADDRESS=#!F )=*!TESTW2 _] + OUTSTR [C(NEW ADDRESS=#!B )=*!TESTW1 _] + SETOM ERRF + JRST ATLERR + +ATL1L: ADDI B,1777 + AOS REGNUM + AOBJN B,ATL1G +ATLERR: DATAI A + TLNE A,100000 + JRST ATL1 ;HOLD LOOP ERR OR NO + SKIPGE ERRF + JUMPL A,ATL1 + MOVEI A,2000 + ADD A,TADR + ANDI A,-1 + CAIGE A,-40000 + JRST ATL1K + MOVEI A,20 + SKIPN LMOD + MOVEI A,400020 +ATL1K: MOVEM A,TADR + SOJG LC,ATL1 + SKIPGE LMOD + JRST ATLUX + SETOM LMOD + MOVEI A,20 + MOVEM A,TADR + CLEARM PTS1+6 + MOVSI A,EXR + ANDCAM A,PTS1+3 + MOVE A,[376,,PTSPT1] + MOVEM A,PTS1+4 + ADDI A,100 + MOVEM A,PTS1+5 + MOVE A,[XCTR 1,D] + JRST ATLU1 + +;Test address part of A, B, C memories + +ATLUX: NEXT + CONO PI,CLKOFF + X LPSET +CON1C: TAG TESTING CONTENTS OF A MEMORY_ + SETOM LMOD +CON2A: MOVSI B,-20 + MI U3,0 ;NO ACCESS FOR 20 PAGES + X PGSET + M A,[20,,PTSPT1] + MM A,PTS1+4 + SETOM XCTEM +CON2L: LPMR PTS1 + MI A,100 +CON1L: M B,A + LSH B,-10. + IDIVI B,2 + LDB B,BPGWD(C) + XCTR XRI,[M (A)] + JRST .+2 + JRST CON1M + + LDB C,[121000,,A] + .ERR XCTR DIDNT FAULT,AR NO #!C, ADR =#!A, PAGE WORD=#!B _ + JRST CONERR + +CON1M: SPM SP1 + HLLZ C,SP1+3 + TLNE C,FNACC + JRST CON3L + .ERR WRONG FAULT, SHOULD BE NO ACCESS, IS + X TYPFLT + X CRR + JRST CONERR + +CON3L: TLNN C,FONPR+FNXM+FDBL+FRDO+FRWF+FPURE+FMAR + JRST CON4L + .ERR EXTRA FAULT, SHOULD BE ONLY NACC, IS + X TYPFLT + X CRR + JRST CONERR + +CON4L: X GETMA ;BITS STORED FROM OUTPUT OF ASSOC REGISTER + LDB C,[121000,,A] + CAMN B,U3 + JRST CON5L + .ERR WRONG CONTENTS OF AR #!C, OUTPUT =#!B, SHOULD BE #!U3 _ + JRST CONERR + +CON5L: ADDI A,2000 + CAIGE A,40000 + J CON1L + AOSE XCTEM + J CON1A + MOVSI B,-20 + MI U3,HIGHEST_-10. ; All ones in Map output + X PGCSET + J CON2L + +CON1A: AOS A,LMOD + CAILE A,1 + J CON1B + MI B,20 + CLEARM PTS1+7 + DPB B,BCKEY(A) + %TAG @CONTAG(A) + J CON2A + +CONERR: OUTSTR [CONTINUE? ] +CONER3: MOVEI B,100 + LPMR PTS1 +CONER2: XCTR XRI,[MOVE (B)] + JFCL + CAML B,A + JRST CONER1 + ADDI B,2000 + JRST CONER2 + +CONER1: CONSO TTY,40 + JRST CONER3 + X TYI + CAIE A,"Y + JRST GIVEUP + JRST CONEXT + +BPGWD: 222200,,PTSPT1(B) + 2200,,PTSPT1(B) + +GETMA: LDB C,[320500,,SP1+5] + LDB B,[320500,,SP1+4] + LSH C,5 + IOR B,C + R + +CONTAG: [ASCIZ ?TESTING CONTENTS OF B MEMORY_?] + [ASCIZ ?TESTING CONTENTS OF C MEMORY_?] + +CON1B: CLEARM PTS1+7 + SOJGE LC,CON1C + +CONEXT: NEXT + TAG TESTING XCTR FETCHING USER AC'S FROM AC POINTER_ + PUSHJ P,LPSET + LSH LC,3 +XR2L: MOVE A,LC + DPB A,BCKEY + LSH A,-5 + DPB A,BCKEY+1 + MOVSI B,-1 + MOVEI U3,RW+TPG_-10. + PUSHJ P,PGCSET + MOVE A,[2,,PTSPT1] + MOVEM A,PTS1+4 + CLEARM PTS1+5 + CLEARM PTS1+6 + MI A,TACS + DPB A,[2300,,PTS1+7] + LPMR PTS1 + MI A,17 + MM A,TACS(A) + SOJGE A,.-1 +XR2: MOVEI B,17 +XR2A: PUSHJ P,RAND +IFN A-1, MOVE 1,A + MOVEM A,XRAND +XR3: XCTR XR,[MOVE C,(B)] + SKIPA ;SHOULDNT SKIP IF NO FAULT + JRST XR1 + CAME 1,XRAND + ERRP [.ASCII /XCTR CLOBBERED C(AC), AC=*!A /] + CAME C,TACS(B) + ERRP [.ASCII /XCTR DIDN'T REFERENCE THROUGH AC POINTER CORRECTLY ADR= #!B /] +XR4: SOJGE B,XR3 +TAG XCTR C(FM)=>C(CORE)_ +XCTR1I: MOVSI 16,-15 + MOVEM 16,(16) + SETOM TPG+100(16) + MOVNM 16,TACS(16) ;SOMETUHING OTHER THAN CORRECT DATA + AOBJN 16,.-3 + CLEARB 16,XCTEM +XCTR1L: DPB 16,[400,,XCT1CM] + DPB 16,[BAC,,XCT1CM] + HRLS 16 + ADDI 16,100 + XCTR XW,[BLT 16,0] + SKIPA + ERR @ERTB + XCT XCT1CM ;AC STORED OK? + JRST XCT1E + MI 16,1 + ADDB 16,XCTEM + CAIGE 16,16 + J XCTR1L +XCTR2I: TAG XCTR C(CORE)=>C(FM)_ + MI 0,0 + MI 16,1 + BLT 16,15 ;CLEAR OUT ACS + CLEARB 16,XCTEM +XCTR2L: DPB 16,[400,,XCT1CM] + DPB 16,[BAC,,XCT1CM] + HRLI 16,100(16) ;USER ADDRESS + XCTR XR,[BLT 16,0] + SKIPA + ERR @ERTB + XCT XCT1CM + J XCT2E + MI 16,1 + ADDB 16,XCTEM + CAIGE 16,16 + J XCTR2L +XCTR3I: TAG XCTR C(CORE)=>C(CORE)_ + MI 16,TPG+100 + MM 16,(16) + SETOM 100(16) + CAIGE 16,TPG+177 + AOJA 16,.-3 + CLEARB 16,XCTEM +XCTR3L: HRLI 15,100(16) + HRRI 15,200(16) + XCTR XRW,[BLT 15,0] + SKIPA + ERR @ERTB + M A,TPG+100(16) + M B,TPG+200(16) + CAME A,B + J XCTR3E + MI 16,1 + ADDB 16,XCTEM + CAIGE 16,100 + J XCTR3L +XCTR4I: SETOM LMOD +XCTR4A: MOVE A,LMOD + %TAG @TAGTB+1(A) + M A,[2,,[RW+TPG1_-10.,,0]] + MM A,PTS1+6 ;EXEC POINTER + MOVSI A,4 + IORM A,PTS1+3 + LPMR PTS1 + MI 16,TPG+100 + MM 16,(16) + SETOM TPG1-TPG(16) + CAIGE 16,TPG+177 + AOJA 16,.-3 + MOVE A,[TPG+100,,400100] + SKIPL LMOD + JRST XCTR4B + XCTR 0,[BLT A,400177] + SKIPA + ERR @ERTB +XCTR4C: MOVEI 16,100 +XCTR4L: M A,TPG(16) + M B,TPG1(16) + CAME A,B + JRST XCTR4E + CAIGE 16,177 + AOJA 16,XCTR4L + AOSG LMOD + JRST XCTR4A + CLEARM PTS1+6 + MOVSI A,4 + ANDCAM A,PTS1+3 + LPMR PTS1 +XCTR5I: TAG XCTR INDIRECT INDEXED MOVE_ + M A,[XCT5TC,,TACS] ;PUT POINTERS IN TACS TO CATCH REFERENCES + BLT A,TACS+4 + PUSHJ P,RAND + MM A,TPG+100 + MM A,XCTEM + MOVSI 16,XCT5AC + BLT 16,4 + XCTR XR,[MOVE 16,@(1)] + SKIPA + ERR @ERTB + M 15,XCTEM + CAME 16,15 +.ERR C(C(C(1)=#1 )=#2 )=*15 => C(16)=*16 +TAG XCTR OF READ/PAUSE/WRITE_ + SETOM 37 + PUSHJ P,RAND + MOVEM A,XCTEM + MM A,TPG+37 + MI A,0 + XCTR XRW,[ADDB A,37] + SKIPA + ERR @ERTB + CAME A,XCTEM +XCTR6A: .ERR C(AC)=*!A ,C(USER 37)=*!XCTEM _ +; PUSHJ P,RAND +; MM A,TPG+37 +; MM A,XCTEM +; MI A,0 +; XCTR XW,[ADDB A,37] +; SKIPA +; ERR @ERTB +; CAME A,XCTEM +; ERR @XCTR6A +TAG XCTR OF LDB_ + CLEARM 37 + M A,[112200,,100] + MM A,TPG+37 + X RAND + MM A,TPG+100 + LDB B,[112200,,A] + XCTR XR,[LDB A,37] + SKIPA + ERR @ERTB + CAME A,B + .ERR LDB [112200,,100] C(100)=*! C(AC)=*!A _ +;TAG XCTR XW, DPB_ +; SETCM A,TPG+100 +; M B,TPG+100 +; DPB A,[2200,,B] +; XCTR XW,[DPB A,[2200,,100]] +; SKIPA +; ERR @ERTB +; M A,TPG+100 +; CAME A,B +; .ERR DPB [2200,,100] C(100)=*!A ,SHOULD BE *!B _ +TAG USER =>EXEC 400000_ + M A,[2,,[RW+TPG1_-10.,,0]] + MM A,PTS1+6 + M A,[2,,[RW+TPG_-10.,,0]] + MM A,PTS1+4 + MOVSI A,EXR + IORM A,PTS1+3 + LPMR PTS1 + M A,[-100,,100] + MM A,TPG(A) + SETOM TPG1(A) + AOBJN A,.-2 + M A,[100,,400100] + XCTR XR,[BLT A,400177] + SKIPA + ERR @ERTB + M A,[-100,,100] +XCTR7L: M B,TPG(A) + M C,TPG1(A) + MI D,400000(A) + CAME B,C + .ERR C(USER #!A )=*!B =>C(EXEC #!D )=*!C _ + AOBJN A,XCTR7L + M A,[-100,,200] + MM A,TPG1(A) + SETOM TPG(A) + AOBJN A,.-2 + M A,[400200,,200] + XCTR XW,[BLT A,277] + SKIPA + ERR @ERTB + M A,[-100,,200] +XCTR8L: M B,TPG1(A) + M C,TPG(A) + MI D,400000(A) + CAME B,C + .ERR C(EXEC #!D )=*!B => C(USER #!A )=*!C _ + AOBJN A,XCTR8L + SOJG LC,XR2L + + NEXT + +BCTEST: PUSHJ P,LPSET + LSH LC,-3 ;COMPENSATE FOR RUNNING TIME + MOVEI U3,RO+TPG_-10. + MOVSI B,-400 + PUSHJ P,PGCSET ;FILL ALL VIRTUAL MEMORY +BCT5A: MOVEI T,0 +BCT5: SETOM LMOD ;LOSER MODE MEMORY FIRST + MOVE A,[376,,PTSPT1] + MOVEM A,PTS1+4 ;LOW DBR + ADDI A,100 + MOVEM A,PTS1+5 ;HIGH DBR + CLEARM PTS1+6 +BCT1: CLEARM BCPGNO ;PAGE NO OF KEY + PUSHJ P,RAND + MOVEM A,XRAND + MOVEM A,TPG+105 +BCT2: MOVSI A,EXR + SKIPN LMOD + IORM A,PTS1+3 + SKIPE LMOD + ANDCAM A,PTS1+3 + MOVE A,BCPGNO + SKIPE LMOD + TRO A,20 + DPB A,BCKEY(T) + LSH A,14. ;FORM ADDRESS QUANITY + HRLI A,-20 ;CHECK 16. PAGES IN BC MEMORY +BCT4: LPMR PTS1 + SKIPE LMOD + XCTR XR,[MOVE B,105(A)] + SKIPL LMOD + MOVE B,105(A) + CAME B,TPG+105 + ERRP [.ASCII /BCKEY, ADR=#!A /] + SPM SP1 + LDB B,[250400,,SP1+2] ;RING BUFFER COUNTER + JUMPE B,BCT3 + MOVE C,BCPGNO + ERR @BCTBL(T) +BCT3: ADDI A,1777 + AOBJN A,BCT4 + AOS A,BCPGNO + CAIGE A,20 + JRST BCT2 + AOSE LMOD + JRST BCT6 + CLEARM PTS1+4 + CLEARM PTS1+5 + MOVE A,[376,,PTSPT1] + MOVEM A,PTS1+6 + MOVEI A,10 + MOVEM A,BCPGNO ;DO ONLY HIGH MEMORY FOR EXEC + JRST BCT2 + +BCT6: CAIGE T,1 + AOJA T,BCT5 + SOJGE LC,BCT5A + NEXT + + + X LPSET + LSH LC,3 +FLT1I: TAG LPMRI TEST FOR INTERRUPT_ + M A,LC + DPB A,BCKEY + LSH A,-5 + DPB A,BCKEY+1 + CLEARM LP1 + M A,[LP1,,LP1+1] + BLT A,LP1+7 + MOVSI A,1 + MM A,LP1+3 + BRANCH .+3 + LPMRI LP1 + INTCHECK + + MOVSI A,1 + ANDCAM A,APRBP+3 + MOVSI A,-10 +FLT1L: M B,APRBP(A) + M C,B + AND B,MSK1(A) + SKIPE B + .ERR LPMRI WD #!A =0,STORED AS *!C _ + AOBJN A,FLT1L + JSR INTFLS +TAG NACC FAULT TST_ + CLEARM PTS1+5 + CLEARM PTS1+6 + MOVSI A,4 + ANDCAM A,PTS1+3 + CLEARM PTSPT1 + M A,[PTSPT1,,PTSPT1+1] + BLT A,PTSPT1+177 + M A,[376,,PTSPT1] + MM A,PTS1+4 + LPMR PTS1 + MOVEI A,20 +FLT2L: BRANCH .+3 + XCTR XR,[CAM (A)] + INTCHECK + + HLRZ B,APRBP+3 + TRZ B,5 + LDB C,[250400,,APRBP+2] + HLRZ D,APRBP+3 + CAIE B,1010 ;NACC + .ERR WRONG FAULT, ADR=#!A ,STATUS=#!D , RBC=#!C _ + LDB E,[221100,,APRBP] + LDB C,[121000,,A] + TRO C,400 ;USER + CAME E,C + .ERR WRONG FAULT PAGE NO., ADR=#!A ,PAGE NO. =#!E _ + MOVSI B,1010 + ANDCAM B,APRBP+3 + LPM APRBP + JSR INTFLS + ADDI A,2000 ;TRY NEXT ASSOC REGISTER + CAIGE A,2000*16.+20 + JRST FLT2L + +TAG DBRL FAULT TEST_ + BRANCH .+3 + XCTR XR,[CAM -1] + INTCHECK + + HLRZ B,APRBP+3 + M D,B + TRZ B,5 + CAIE B,1200 +FLT2P: .ERR WRONG FAULT, STATUS=#!D _ + LDB E,[221100,,APRBP] + CAIE E,777 + .ERR WRONG FAULT PAGE NO. ADR=777777 PAGE NO.=#!E _ + MOVSI B,1200 + ANDCAM B,APRBP+3 + LPM APRBP + JSR INTFLS +TAG READ ONLY FAULT TEST_ + MOVSI B,-1 + MI U3,RO+TPG_-10. + X PGCSET + LPMR PTS1 + BRANCH FLT3A + XCTR XW,[MM 20] + INTCHECK + +FLT3A: HLRZ A,APRBP+3 + M D,A + TRZ A,5 + CAIE A,1100 + ERR @FLT2P + MOVSI B,1100 + ANDCAM B,APRBP+3 + LPM APRBP + JSR INTFLS +TAG READ WRITE FIRST FAULT TEST_ + MOVSI B,-1 + MI U3,RWF+TPG_-10. + X PGCSET + LPMR PTS1 + BRANCH FLT4A + XCTR XW,[MM 20] + INTCHECK + +FLT4A: HLRZ A,APRBP+3 + M D,A + TRZ A,5 + CAIE A,1040 + ERR @FLT2P + MOVSI B,1040 + ANDCAM B,APRBP+3 + LPM APRBP + JSR INTFLS + +TAG PAGE ILM TEST_ + HRRO A,MEMSIZ + AOJE A,FLT5I ;Not enough ILM available + HRLI A,2 + MM A,PTS1+5 + LPMR PTS1 + BRANCH .+3 + XCTR XR,[CAM 400000] + INTCHECK + + HLRZ A,APRBP+3 + M D,A + TRZ A,5 + CAIE A,400 + ERR @FLT2P + CONSO 10000 + .ERR PAGE TABLE ILM DIDNT SET PROCESSOR NXM FLAG_ + CONO 10000+APRCHN + JSR INTFLS + CLEARM PTS1+5 + CLEARM PTS1+6 + MOVSI A,4 + ANDCAM A,PTS1+3 + LPMR PTS1 + HRRO A,MEMSIZ + AOJE A,FLT5I + BRANCH .+3 + SPM (A) + INTCHECK + + HLRZ A,APRBP+3 + M D,A + TRZ A,5 + CAIE A,400 + ERR @FLT2P + JSR INTFLS + +FLT5I: TAG PURE CODE TEST_ + LPMR PTS1 + JRST 2,@[PURE,,.+1] + JSP A,.+1 + TLNN A,PURE + .ERR PURE BIT DIDN'T SET IN PC =*!A _ + MOVE A,[JSR PURET] + MOVEM A,46 + CONO PI,6220 + JRST 4,. + +PURET: 0 + JRST 10,.+1 + CONO PI,1020 + MOVE A,PURET + TLNN A,PURE + .ERR PURE BIT WASN'T STORED BY INTERRUPT, PC=*!A _ + JSP A,.+1 + TLNE A,PURE + .ERR PURE BIT DIDN'T CLEAR IN PC =*!A _ + CLEARM PTS1+5 + M A,[2,,[RO+TPG_-10.,,0]] + MM A,PTS1+4 + M A,[SOJGE A,100] + MM A,TPG+100 + M A,[M 400000] + MM A,TPG+101 + M A,[ERR [.ASCII /FAULT FROM USER MODE FAILED_/]] + MM A,TPG+102 + MM A,TPG+103 + LPMR PTS1 + MI A,100. + BRANCH .+2 + JRST 2,@[LSRMOD+PURE,,100] + + HLRZ B,APRBP+3 + TRZ B,5 + CAIE B,1200 + ERR @FLT2P + HRRZ B,APRBP+1 + CAIE B,101 +FLT5P: .ERR WRONG INSTRUCTION FAULTED, OPC=#!B _ + JSR INTFLS + M A,[2,,[RWF+TPG_-10.,,0]] + MM A,PTS1+4 + LPMR PTS1 + MI A,100. + BRANCH .+2 + JRST 2,@[LSRMOD+PURE,,100] + + HLRZ B,APRBP+3 + TRZ B,5 + CAIE B,1020 + ERR @FLT2P + HRRZ B,APRBP+1 + CAIE B,100 + ERR @FLT5P + JSR INTFLS + M A,[2,,[RW+TPG_-10.,,0]] + MM A,PTS1+4 + LPMR PTS1 + MI A,10000. + BRANCH .+2 + JRST 2,@[LSRMOD+PURE,,100] + + HLRZ B,APRBP+3 + TRZ B,5 + CAIE B,1020 + ERR @FLT2P + HRRZ B,APRBP+1 + CAIE B,100 + ERR @FLT5P + JSR INTFLS + SOJGE LC,FLT5I + + +NEXT + X LPSET + LSH LC,-6 +OPC1I: MOVEM LC,LCM' + M A,[376,,PTSPT1] + MM A,PTS1+4 + M A,[376,,PTSPT1+100] + MM A,PTS1+5 + CLEARM PTS1+6 + MOVSI A,EXR + ANDCAM A,PTS1+3 + CLEARM PTSPT1 + M A,[PTSPT1,,PTSPT1+1] + BLT A,PTSPT1+177 + LPMR PTS1 + TAG TESTING OPC _ + MI A,37 +OPC1A: M B,A + HRLI B,LSRMOD + BRANCH .+2 + JRST 2,@B + HRRZ B,APRBP+1 + CAME B,A + .ERR OPC INCORRECT, OPC=#!B, SHOULD BE #!A _ + JSR INTFLS + LSH A,1 + TRO A,1 + TLNN A,1 + JRST OPC1A + TAG TESTING OPC FLAGS _ + MI A,40 ;FIRST FLAG +OPC2A: HRL B,A + HRRI B,100 + TLO B,LSRMOD + BRANCH .+2 + JRST 2,@B + + HLRZ B,APRBP+1 + LSH B,5 + ANDI B,PCBITS + M C,A + ANDI C,PCBITS ;BITS THAT ARE USED + TRO C,LSRMOD + CAME B,C + .ERR PC LEFT HALF =#!B, SHOULD BE #!C _ + JSR INTFLS + LSH A,1 + TLNN A,1 + JRST OPC2A + +TAG TESTING BIS FLAG _ +BIS1I: MI U3,RW+TPG_-10. + MOVSI B,-1 + X PGCSET + LPMR PTS1 + M A,[IDPB 110] + MM A,TPG+100 + M A,[M 400000] + MM A,TPG+101 + MI A,400000 + MM A,TPG+110 + BRANCH .+2 + JRST 1,100 + HRRZ A,APRBP+1 + CAIE A,100 + .ERR IDPB W/BYTE PNTR ILLEGAL WRONG PC,=#!A _ + HLRZ A,APRBP+1 + LSH A,5 + TRNN A,BIS + .ERR BIS FLAG NOT SET IN OPC _ + JSR INTFLS + M A,[IDPB 400000] + MM A,TPG+100 + BRANCH .+2 + JRST 1,100 + + HRRZ A,APRBP+1 + CAIE A,100 + .ERR IDPB W/ILL ADR WRONG PC =#!A _ + HLRZ A,APRBP+1 + LSH A,5 + TRNE A,BIS + .ERR BIS FLAG SET IN OPC BEFORE IBP _ + JSR INTFLS + +TAG TESTING PUSH INSTRUCTIONS _ +PSH1I: M A,[PUSH 16,] + MM A,TPG+100 + MI 16,2000-1 + BRANCH .+2 + JRST 1,100 + + HRRZ A,APRBP+1 + CAIE A,100 + .ERR PUSH HAD WRONG OPC =#!A _ + CAIE 16,2000-1 + .ERR PUSH CLOBBERED AC =#16 SHOULD BE 1777_ + JSR INTFLS + M A,[POP 16,400000] + MM A,TPG+100 + M 16,[-1,,200] + BRANCH .+2 + JRST 1,100 + + HRRZ A,APRBP+1 + CAIE A,100 + .ERR POP WITH WRONG OPC =#!A _ + CAME 16,[-1,,200] + .ERR POP CLOBBERED AC =#16, SHOULD BE -1,,200 _ + JSR INTFLS + M A,[PUSHJ 16,400] + MM A,TPG+100 + MI 16,2000-1 + BRANCH .+2 + JRST 1,100 + + HRRZ A,APRBP+1 + CAIE A,100 + .ERR PUSHJ W/WRONG OPC =#!A _ + CAIE 16,2000-1 + .ERR PUSHJ CLOBBER PC=#16, SHOULD BE 1777 _ + JSR INTFLS + +TAG TESTING BLT _ +BLT1I: M A,[BLT 16,377] + MM A,TPG+100 + M 16,[2000-100,,200] + BRANCH .+2 + JRST 1,100 + + HRRZ A,APRBP+1 + CAIE A,100 +BLT1P: .ERR WRONG PC=#!A SHOULD BE 100_ + CAME 16,[2000,,300] + .ERR BLT AC STORED INCORRECT =#16, SHOULD BE 2000,,300 _ + JSR INTFLS + M A,[BLT 16,2077] + MM A,TPG+100 + M 16,[200,,2000-100] + BRANCH .+2 + JRST 1,100 + + HRRZ A,APRBP+1 + CAIE A,100 + ERR @BLT1P + CAME 16,[300,,2000] + .ERR BLT AC STORED INCORRECT =#16, SHOULD BE 300,,2000 _ + JSR INTFLS + +TAG TESTING PI TRAP _ + M A,[MM 400000] + MM A,TPG+1775 + M A,[ERR [.ASCII /FAULTED INS DIDNT SKIP _/]] + MM A,TPG+1776 + M A,[CONO PI,6220] + MM A,TPG+1777 + MI U3,RO + DPB U3,[222200,,PTSPT1+100] + LPMR PTS1 + CONO ;DISABLE TRAPS TO PROCESSOR + M A,[JSR PIT1A] + MM A,46 + JRST 2,@[LSRMOD+IOTLSR,,1775] + +PIT1A: 0 + SPM APRBP + HRRZ A,APRBP+1 + CAIE A,1777 + ERR @BLT1P + HLRZ A,APRBP+3 + TRNE A,10 +PIT2P: .ERR PI DIDNT TRAP BEFORE NEXT INSTRUCTION _ + MOVSI A,1110 + ANDCAM A,APRBP+3 + LPM APRBP + JRST 10,.+1 + MI A,PIT2A + HRRM A,46 + JRST 12,@[LSRMOD+IOTLSR,,1777] + +PIT2A: 0 + SPM APRBP + HRRZ A,APRBP+1 + CAIE A,1777 + ERR @BLT1P + HRRZ A,PIT2A + CAIE A,2000 + .ERR INTERRUPT FROM #!A, SHOULD BE 2000_ + HLRZ A,APRBP+3 + TRNE A,1110 + ERR @PIT2P + MOVSI A,1110 + ANDCAM A,APRBP+3 + LPM APRBP + JRST 10,.+1 + MI A,PIT3A + HRRM A,46 + CONO 20000 + JRST 2,@[LSRMOD+IOTLSR,,1777] + +PIT3A: 0 + HRRZ A,PIT3A + CAIE A,2002 + .ERR INTERRUPTED FROM #!A, SHOULD BE 2002_ + CONSO 20000 + .ERR MEM PROT FLAG DIDNT GET SET _ + CONO 20000+APRCHN + JRST 10,.+1 + + CLEARM PTS1+6 + MOVSI A,EXR + IORM A,PTS1+3 + LPMR PTS1 + BRANCH .+3 + M 400000 + INTCHECK + + LDB A,[221100,,APRBP] + CAIE A,200 + .ERR FAULT PAGE NO =#!A, SHOULD BE 200 _ + JSR INTFLS + BRANCH .+3 + M -1 + INTCHECK + + LDB A,[221100,,APRBP] + CAIE A,377 + .ERR FAULT PAGE NO. =#!A, SHOULD BE 377 _ + JSR INTFLS + + MOVSI A,EXR + ANDCAM A,PTS1+3 + LPMR PTS1 +TAG TESTING AGE REGISTER _ + MOVSI B,-2 + MI U3,RW+TPG_-10. + X PGCSET + MI A,7 + DPB A,[B.AGE,,PTS1] + LPMR PTS1 + XCTR XR,[M 100] + SKIPA + ERR @ERTB + M A,PTSPT1 + M B,[RW+TPG_-10.,,RW+TPG_-10.] + MM B,XCTEM + MOVEI C,17 + DPB C,[B.AGE,,B] + CAME A,B +AGE1P: .ERR AGE STORED INCORRECT =*!A,SHOULD BE *!B _ + LPMR PTS1 + MI A,0 + DPB A,[B.AGE,,PTSPT1] + XCTR XR,[M 2100] + SKIPA + ERR @ERTB + M B,XCTEM + MOVEI C,17 + DPB C,[B.AGE1,,B] + M A,PTSPT1 + CAME A,B + ERR @AGE1P + MM B,PTSPT1 + MI A,0 + DPB A,[B.AGE,,PTS1] + LPMR PTS1 + XCTR XR,[M 100] + SKIPA + ERR @ERTB + M B,XCTEM + MI C,17 + DPB C,[B.AGE1,,B] + M A,PTSPT1 + CAME A,B + ERR @AGE1P + LPMR PTS1 + XCTR XR,[M 2100] + SKIPA + ERR @ERTB + M B,XCTEM + M A,PTSPT1 + CAME A,B + ERR @AGE1P + +TAG TESTING JPC _ + MI B,4 + MI U3,RW + M U2,[442200,,PTSPT1] + IDPB U3,U2 + AOS U3 + SOJG B,.-2 ;MAP BOTTOM 4K TO SELF + CLEARM PTSPT1+2 + M A,[PTSPT1+2,,PTSPT1+3] + BLT A,PTSPT1+177 + MOVNI A,1 + HRRM A,PTS1 + LPMR PTS1 + BRANCH JPC1A + JRST 1,.+1 + M 400000 +JPC1P: .ERR MPV DIDNT FAULT _ + +JPC1A: HRRZ A,APRBP + CAIE A,-1 + .ERR JPC CHANGED, WAS -1 NOW #!A _ + JSR INTFLS + BRANCH JPC2A + JRST 1,.+1 +JPC1IN: JRST .+1 + M 400000 + ERR @JPC1P + +JPC2A: HRRZ A,APRBP + CAIE A,JPC1IN + .ERR JPC WRONG, SHOULD BE !JPC1IN, IS #!A _ + JSR INTFLS + BRANCH JPC3A + MI A,DMYUUO + HRRM A,41 + JRST 1,JPC2IN +DMYUUO: 0 + JRST 2,@DMYUUO +JPC2IN: JRST .+1 + 47000,,0 + M 400000 + MOVEI A,UUOH + HRRM A,41 + ERR @JPC1P +JPC3A: MOVEI A,UUOH + HRRM A,41 + HRRZ A,APRBP + CAIE A,JPC2IN + .ERR JPC SHOULD BE !JPC2IN, IS #!A _ + JSR INTFLS + M A,[JRST B] + M B,[M 400000] + BRANCH .+2 + JRST 1,A + + HRRZ A,APRBP + CAIE A,A + .ERR JPC SHOULD BE !A, IS #!A _ + JSR INTFLS +JPC3B: IFGE .-10000,[PRINTX /PRGM GREW TO BIG AT JPC3B +/] ;ONLY BOTTOM 4K MAPPED TO SELF + +TAG TESTING MAR _ + MI A,400 + MI U3,RW+TPG_-10. + M B,[442200,,PTSPT1] + IDPB U3,B + SOJG A,.-1 + CLEARM OPPNR + MI A,4 + MI U3,RO + M B,[442200,,PTSPT1] + IDPB U3,B + AOS U3 + SOJG A,.-2 + M A,[4,,100] ;USER, NEVER CONDITION + MM A,PTS1+2 + LPMR PTS1 + M 100 ;TEST + BRANCH MAR1A + JRST 1,.+1 + M 100 + M U1,RAND1 + M U2,RAND2 + MI U3,100. + FMP U1,U2 + M (U1) + SOJG U3,.-2 + MM 77 + ERR @JPC1P + +MAR1A: HLRZ A,APRBP+3 + TRNE A,2 + .ERR MAR INT C(MAR)=*! -ADR =#!U1 _ + JSR INTFLS + M A,[6,,TPG+77] ;USER, WRITE + MM A,PTS1+2 + LPMR PTS1 + MM TPG+77 + M TPG+77 + BRANCH MAR2A + JRST 1,.+1 + M TPG+77 +MAR1IN: MM TPG+77 + JFCL +MAR1P: .ERR MAR DIDNT INTERRUPT + +MAR2A: HRRZ A,APRBP+1 + M B,APRBP+2 + CAIE A,MAR1IN + .ERR MAR INT AT WRONG TIME, OPC=#!A MAR=*!B _ + HLRZ A,APRBP+3 + M B,A + TRZ A,5 + CAIE A,2 + .ERR WRONG FAULT, STATUS =#!B _ + JSR INTFLS + BRANCH MAR3A + M A,[5,,MARFOO] ;USER, INSTRUCTION FETCH + MM A,PTS1+2 + LPMR PTS1 + M A,[MARLUP,,B] + BLT A,MAREND + JRST 1,B +MARLUP: OFFSET B-. + M MARFOO + MM MARFOO +MARFOO: JFCL +MAREND: ERR @MAR1P + OFFSET 0 +MARFOO==MARFOO +MAREND==MAREND + +MAR3A: HRRZ A,APRBP+1 + M B,APRBP+2 + CAIE A,MARFOO +MAR3P: .ERR WRONG OPC FOR MAR,OPC=#!A, MAR=#!B _ + JSR INTFLS + M A,[7,,TPG+100] ;USER, ANY REFERENCE + MM A,PTS1+2 + LPMR PTS1 + BRANCH MAR4A + XCTR XW,[M TPG+100] + XCTR XR,[MM TPG+100] +MAR4IN: XCTR XR,[M TPG+100] + ERR @MAR1P + +MAR4A: HRRZ A,APRBP+1 + M B,APRBP+2 + CAIE A,MAR4IN + ERR @MAR3P + JSR INTFLS + MI A,100 + MM A,XCTEM +MAR4B: X RAND + ANDI A,-1 + CAIGE A,MAR5C + CAIGE A,MAR4D + CAIG A,B + JRST MAR4B ;AVOID LOCN REFERENCED BY TEST PRGM + MM A,XRAND + HRLI A,7 + MM A,PTS1+2 + LPMR PTS1 + M B,A + AND B,MEMSIZ + M (B) + BRANCH MAR5A + JRST 1,.+1 +MAR4D: MI B,1 +MAR4L: XOR A,B +MAR4C: M (A) + XOR A,B + LSH B,1 + TLNN B,1 + JRST MAR4L +MAR5M: M (A) + ERR @MAR1P + +MAR5C: HRRZ D,XRAND + .ERR MAR SET TO #!D, INT ON #!A _ + J MAR5D + +MAR5A: HLRZ C,APRBP+3 + TRZ C,5 + CAIN C,2 + JRST MAR5AA + .ERR RANDOM FAULT, STATUS= + HLLZ C,APRBP+3 + X TYPFLT + X CRR +MAR5AA: HRRZ C,APRBP+1 + CAIN C,MAR4C + JRST MAR5C + M B,APRBP+2 + CAIE C,MAR5M + ERR @MAR3P +MAR5D: JSR INTFLS + SOSLE XCTEM + J MAR4B + M A,[3,,100] + MM A,PTS1+2 + LPMR PTS1 + MI B,1 + BRANCH MAR6A +MAR5B: XOR A,B + M (A) + XOR A,B + LSH B,1 + CAMGE B,MEMSIZ + TLNE B,1 + SKIPA + JRST MAR5B + XCTR XR,[M (A)] +MAR5IN: M (A) + ERR @MAR1P + +MAR6A: HRRZ A,APRBP+1 + M B,APRBP+2 + CAIE A,MAR5IN + ERR @MAR3P + JSR INTFLS + CLEARM PTS1+2 + MOVSI A,EXR+1 + MOVEM A,PTS1+3 + LPMR PTS1 + +IFN QT,[ + DATAI A + ANDI A,7 + AND A,PASSS + JUMPN A,QUANX + SKIPE LCM ;ONLY ON LAST TIME THROUGH + JRST QUANX +TAG TESTING QUANTUM TIMER _ + HRLOI A,1 + ANDCAM A,PTS1+3 + BRANCH QUAN1A + CLEARM XCTEM + CONO 1000+APRCHN + CONSO 1000 + JRST .-1 + CONO 1000+APRCHN + LPMR PTS1 + CONSO 1000 + JRST .-1 +QUAN2B: SPM SP1 ;SHOULD GET HRE BEFORE INTERRUPT + SETOM XCTEM + MOVEI A,400000 + SOJG A,. + .ERR QUANTUM TIMER DIDNT INTERRUPT_ + JRST QUANX +QUAN2C: MOVSI A,1+EXR + MM A,PTS1+3 + LPMR PTS1 + JSR INTFLS + HRRZ A,SP1+3 + MM A,QTIME + M B,A + SUBI A,16666. + MOVMS A + CAIL A,16666./50. ;2% + J QUAN3A + M A,[JSR QUAN2A] + MM A,46 + HRLOI A,1 + ANDCAM A,PTS1+3 + LPMR PTS1 + CONO PI,6220 + JRST 4,. + +QUAN1A: AOSN XCTEM + JRST QUAN2C + HLRZ A,APRBP+3 + TRNE A,1 + .ERR QUANT INTERRUPT BEFORE 16 MS._ + TRNE A,-1#EXR#1 + .ERR RANDOM FAULT, STATUS = + HLLZ C,APRBP+3 + X TYPFLT + X CRR + JSR INTFLS + J QUAN2B + +QUAN3A: .ERR QUANTUM TIMER OFF, !16666. =#!B LOCN OF TIME =!QTIME _ + CLEARM PTS1+3 +QUAN3B: CONO 1000 + CONSO 1000 + JRST .-1 + LPMR PTS1 + CONO 1000 + CONSO 1000 + JRST .-1 + SPM SP1 + M A,SP1 3 + HRRM A,QTIME + J QUAN3B + +QUAN2A: 0 + SPM SP1 + HRRZ A,SP1+3 + CAILE A,10. + .ERR QUAN DIDNT STOP SOON ENUF =#!A _ + MI B,100. + SOJG B,. + SPM SP1 + HRRZ B,SP1+3 + CAME A,B + .ERR QUAN COUNTING PI IN PROGRESS #!A, TO #!B _ +] + ;ONE PROCEED + +QUANX: CONO 40000+APRCHN + MOVSI A,1 + IORM A,PTS1+3 + LPMR PTS1 + JRST 10,.+1 +TAG TESTING ONE PROCEED_ + CONO PI,CLKOFF + MOVE A,[JSR ONEPIH] + MOVEM A,50 + CONO PI,6210 + JRST 4,. +ONEPIH: 0 + MOVEI A,ONPRET + HRRM A,50 + CONO PTR,14 + JRST 12,@[ONEPR,,.+1] + JRST 4,. + +ONPRET: 0 + JSP B,.+1 + MOVE A,ONPRET + TLNN A,ONEPR + .ERR ONEPROCEED NOT STORED BY INTERRUPT, PC=*!A _ + TLNE B,ONEPR + .ERR ONEPROCEED NOT CLEARED BY TRAP, PC=*!B _ + SPM SP1 + HLLZ C,SP1+3 + TLNE C,FONPR + .ERR ONE PROCEED TRAP FOLLOWED INTERUPT, SHOULD HAVE BEEN CLEAR_ + CONO 20000+APRCHN + CONO PTR,0 + CONO PI,1010 + MI A,-6 + DPB A,[2300,,PTS1+3] + LPMR PTS1 + MI A,DMYUUO + HRRM A,41 + MI A,ONP1L + MM A,XCTEM + MOVEI A,ONP1A + MOVEM A,INTLOC + CONO PI,CLKON + JRST 12,@[ONEPR,,ONP1L] + +ONP1L: MI 1,40 +ONP2L: M + MM + 47000,,0 + MOVEI + BLT 16 + MI 16,10 + PUSHJ 16,.+1 + JRST .+1 + MI 11,.+2 + POPJ 16, +ONP3L: SOJG 1,ONP2L +ONP3B: JFCL + CONO PI,CLKOFF + CLEARM INTLOC + MI A,UUOH + HRRM A,41 + .ERR NO ONE PROCEED INTERRUPT_ + +ONP3A: MOVSI A,1 + DPB A,[2300,,PTS1+3] + LPMR PTS1 + JSR INTFLS + MI A,UUOH + HRRM A,41 + MOVE LC,LCM' + SOJGE LC,OPC1I + AOS PASSS + JRST BEGLUP + + +ONP1A: MI A,UUOH + HRRM A,41 + HLRZ A,APRBP+3 + TRNN A,FFAULT + JRST ONP1B + .ERR RANDOM FAULT, STATUS= + HLLZ C,APRBP+3 + X TYPFLT + X CRR +ONP1B: TRNN A,FONPR + JRST ONP2A + HLRZ C,APRBRK + TRNE C,ONEPR + .ERR ONE PROCEED BIT STILL SET IN PC_ + HRRZ A,APRBRK + CAIN A,ONP3B+1 + JRST ONP3A + M B,XCTEM + AOS B + CAIN A,DMYUUO+1 + J ONP4A + CAME A,B + CAIN B,ONP3L+1 + JRST ONP2B + .ERR PC SHOULD BE #!B, IS #!A _ +ONP2B: HRRZM A,XCTEM + MOVSI A,ONEPR + IORM A,APRBRK +ONP2C: MOVSI A,2000 + ANDCAM A,APRBP+3 + LPMR APRBP +ONP2A: MI C,DMYUUOH + HRRM C,41 + HLRZ A,APRBP+3 + TRNN A,1 + JRST APRBK2 + CONO 40000+APRCHN + MI A,-6 + DPB A,[2300,,APRBP+3] + LPMR APRBP + JRST APRBK2 + +ONP4A: HRRZ A,DMYUUO + CAME A,B + .ERR UUO FROM WRONG LOC =#!A, SHOULD BE #!B _ + HRRZM A,XCTEM + HLRZ C,DMYUUO + TRNE C,ONEPR + .ERR UUO LEFT ONE-PROCCED BIT, LH PC=#!C _ + MOVSI C,ONEPR + IORM C,DMYUUO + J ONP2C + +BCTBL: [.ASCII /B KEY FAILED TP MATCH +ADR= #!A , B KEY=#!C , RBC=#!B /] + [.ASCII /C KEY FAILED TP MATCH +ADR= #!A , C KEY=#!C , RBC=#!B /] + +TAGADR: 0 ;ADDRESS OF ASCII AT LAST TAG UUO +TAGPC: 0 ;PC OF LAST TAG UUO +XCTEM: 0 +XCT1CM: CAME 0,TPG+100 + +XCT1E: MOVSS 16 +XCT2E: M A,(16) + MOVSS 16 + M B,TPG(16) + HLRZ C,16 ;AC ADR + HRRZ D,16 ;CORE ADDRESS + MOVEI E,TPG(D) +ERR [.ASCII ?C(AC #!C )=*!A ,VIRTUAL E=#!D, REAL E=#!E, +C(E)=*!B_?] + ERRLUP XCTR1I + J XCTR3I + +XCTR3E: MI C,100(16) + MI D,200(16) +.ERR C(E=*!C )=#!A STORED IN C(E=*!D )=#!B _ + J XCTR4I + +XCTR4B: BLT A,400177 + SKIPA + .ERR BLT TO EXEC 400000 SKIPPED + J XCTR4C + +XCT5TC: -1 + 3 + 4 + 4 + -1 + +XCT5AC: -1 + 2 + 100 + 4 + -1 + +ERTB: [ASCIZ /XCTR SKIPPED WITHIUT FAULT_/] +TAGTB: [ASCIZ ?BLT C(EXEC) => C(REL EXEC)_?] + [ASCIZ ?XCTR 0,BLT C(EXEC)=> C(REL EXEC)_?] +XCTR4E: MI C,TPG(16) + MI D,400000(16) +.ERR C(#!C )=*!A => C(#!D )=*!B _ + J XCTR5I + +XR1: ERR [ASCIZ /XCTR FAULTED WITHOUT INTERRUPT /] + SPM SP1 + MOVEI A,XR1A + MOVEM A,SP1+1 ;OPC SET TO FAULT +XR1A: LPMRI SP1 + JRST XR4 + + NEXTR: 0 + SETZM PTS1 + MOVE A,[PTS1,,PTS1+1] + BLT A,PTS1+7 + SETZM PSW + MOVE A,[PSW,,PSW+1] + BLT A,PSW+7 + MOVSI A,1 + MOVEM A,PTS1+3 + LPMR PTS1 + CONO 675550+APRCHN + SETZM ERRCNT' + MI P,PDL-1 + CLEARM TAGADR + CONO PI,10000+CLKON + CLEARM INTLOC + MI A,UUOH + HRRM A,41 + CLEARM PTS1 + M A,[PTS1,,PTS1+1] + BLT A,PTS1+7 + MOVSI A,1 + MM A,PTS1+3 + LPMR PTS1 + DATAI C + LSH C,-3 + ANDI C,77 + JUMPE C,@NEXTR + MI A,100 + MI D,0 +NXTL1: M B,(A) + CAIL A,NEXTR + J NXTL2 + CAME B,[JSR NEXTR] + AOJA A,NXTL1 + M E,A + AOS D + CAMN C,D + JRST 1(A) + AOJA A,NXTL1 + +NXTL2: SKIPN D + JRST 4,. + JRST 1(E) + +GETDDT: OUTSTR [TYPE DDT LOCATION OR CR ] +GETDD1: MOVEI F,0 +GETDDL: X TYI + CAIN A,15 + JUMPE F,NODDT + CAIN A,15 + JRST GOTDDT + CAIG A,"7 + CAIGE A,"0 + JRST DDTERR + IMULI F,10 + ADDI F,-"0(A) + JRST GETDDL + +DDTERR: OUTSTR [? ] + JRST GETDD1 + +;U3 HAS PAGE BITS WANTED +;B HAS -# OF PAGES,,FIRST ADDRESS +PGCSET: SKIPL E,OPPNR + JRST PGSET + MOVEI U2,0 + PUSHJ P,PGST1 +PGSET: MOVEM B,OPPNR + MOVE E,B + MOVE U2,U3 +PGST1: HRRZ U1,E + LSH U1,-11. + HRLI U1,442200 + TRNE E,2000 + HRLI U1,222200 + ADDI U1,PTSPT1 + IDPB U2,U1 + AOBJN E,.-1 + POPJ P, + +UMAPS: CLEARM UMAP ;CLEAR PREV MAP + MOVE U1,[UMAP,,UMAP+1] ;SET UP USER MAP + BLT U1,UMAP+200-1 ;CLEAR OUT PREV MAP +UMAPM: MOVEI U1,RW ;MERGE + MOVEI LC,16. + MOVE U2,[442200,,UMAP] + IDPB U1,U2 + AOS U1 + SOJG LC,.-2 ;MAP BOTTOM 16K TO ITSELF +;FROM MEM ADR IN LH A, TO MEM ADR IN RH A MAP B CONSEC PAGES + LSH A,-10. ;CONVERT MEM ADRS TO PG NOS + HLRZ C,A + LSHC C,-1 + HRLI C,222200 + SKIPL D + HRLI C,442200 + ADDI C,UMAP +UMAPAC: TRO A,RW ;ACCESS CONTROL + IDPB A,C + AOS A + SOJG B,.-2 + LPMR UMPP + POPJ P, + + +ATL1H: CAME A,TPG+20 + JRST ATL1H1 + ERRP [.ASCII ? GOT OLD DATA ADR #!B ?] + JRST ATL1L + +ATL1H1: ERR [.ASCII ? G *!A ADR #!B +?] + SETOM ERRF + JRST ATL1L + +UMPP: 0 + 0 + 0 + EXR+1,, + 376,,UMAP + 376,,UMAP+100 + 376,,UMAP+100 + TACS + +TACS: REPEAT 16.,.RPCNT+1 + + +UMAP: BLOCK 200 + +UTEST: CONO PI,12200+200_<-APRCHN> + CONO 635550+APRCHN + MOVEI P,PDL + LPMR UPG + XCTR 3,UINS + SKIPE DDTLOC + JRST @DDTLOC + JRST 4,UTEST + +UINS: JFCL +MBYDDT: MOVEI P,PDL + MOVE A,[770000,,30000] + MOVEI B,4 + PUSHJ P,UMAPS + JRST 2,@[14000,,774000] + +RAND: MOVE U1,RAND1 + FMPRM U1,RAND2 + MOVE A,RAND2 + FMPRB U1,RAND2 + HRL A,U1 + POPJ P, + +RAND1: SIXBIT /FOOBAR/ +RAND2: (105*105)105+105+1 + +LPSET: MOVEI LC,100 + DATAI A + ANDI A,7 + MOVNS A + LSH LC,7(A) + POPJ P, + + +UUOH: 0 + CONI PI,PISAV' + CONO PI,CLKOFF + MOVEM 17,UACS+17 + LDB 17,[331100,,40] + CAIN 17,%TAG_-27. + JRST ATAG + CAIN 17,BRANCH_-27. + JRST ABRANCH + MOVEI 17,UACS + BLT 17,UACS+16 + SPM UUOHM + SPM UUOHM1 + MOVSI 17,EXR+1 + ANDCAM 17,UUOHM1+3 ;TURN OFF EXEC PAGING IF ON + LPM UUOHM1 + MOVEI P,UPDL-1 + HRRZ U2,40 + HRLI U2,440700 + LDB A,[331100,,40] + CAIN A,TYPE_-27. + JRST UUOH1 ;PRINT STRING + SKIPE U2,TAGADR + PUSHJ P,SPNT + CLEARM TAGADR + HRRZ A,UUOH + SOS A + X SYMLOK + JRST NOSYM + PUSH P,A + M U1,B + X RAD50 + MI A,"+ + SKIPE (P) + X TYO + POP P,A + SKIPE A +NOSYM: X LZOPT + MI A,"/ + X TYO + X CRR + HRRZ U2,40 + HRLI U2,440700 + LDB U1,[331100,,40] + CAIN U1,ERR_-27. + JRST UUOH1 + CAIN U1,ERRP_-27. + JRST UUOH2 + MOVE U2,[440700,,[ASCIZ /ILL UUO, OPCODE= /]] + PUSHJ P,SPNT + MOVE U3,[140300,,U1] + PUSHJ P,OCTP + X CRR +GIVEUP: +UUOEX1: SKIPE DDTLOC + JRST @DDTLOC + JRST 4,BEGLUP + + +UUOHM: BLOCK 8 +UUOHM1: BLOCK 8 + +ATAG: HRRZ 17,40 + HRLI 17,440700 + MOVEM 17,TAGADR + HRRZ 17,UUOH + MOVEM 17,TAGPC +ARET: MOVE 17,PISAV + ANDI 17,377 + CONO PI,2000(17) + MOVE 17,UACS+17 + JRST 2,@UUOH + +ABRANCH: HRRZ 17,40 + MOVEM 17,INTLOC + JRST ARET + + +SPNT: ILDB A,U2 +SPNTR: JUMPE A,CPOPJ + CAIE A,"# + CAIN A,"* + JRST SPNT1 + CAIN A,"_ + JRST SPNTCR + CAIN A,"& + JRST SPNT1 + PUSHJ P,TYO + JRST SPNT + +SPNT1: MOVE U3,A + MOVEI U1,0 +SPNT2: ILDB A,U2 + CAIL A,"0 + CAILE A,"9 + JRST SPNT3 + LSH U1,3 + ADDI U1,-"0(A) + JRST SPNT2 + +SPNT3: PUSH P,A + CAIGE U1,20 + SKIPA U1,UACS(U1) + MOVE U1,(U1) + CAIN U3,"# + JRST SPNT4 + CAIN U3,"& + JRST ASQOZ + MOVE U3,[440300,,U1] + PUSHJ P,OCTP +SPNT5: POP P,A + JRST SPNTR + +SPNT4: HRRZ A,U1 + M U3,U2 + ILDB U3,U3 + MI B,10 + CAIN U3,". + MI B,10. + PUSHJ P,LZOPT2 + JRST SPNT5 + +ASQOZ: PUSH P,U2 + X RAD50 + POP P,U2 + J SPNT5 + +RAD50: TLZ U1,740000 +ASQZ1: IDIV U1,[50*50*50*50*50] + PUSHJ P,ASQZ2 + MOVE U1,U2 + IMULI U1,50 + JUMPN U1,ASQZ1 + R + +ASQZ2: ADDI U1,"0-1 + CAILE U1,"9 + ADDI U1,"A-"9-1 + CAILE U1,"Z + SUBI U1,"Z+2-"$ + CAIN U1,"# + MOVEI U1,". + M A,U1 + J TYO + +LZOPT: MI B,10 +LZOPT2: HRRM B,LZOPT1 +LZOPT1: IDIVI A,10 + HRLM B,(P) + SKIPE A + PUSHJ P,LZOPT1 + HLRZ A,(P) + ADDI A,"0 + JRST TYO + + +SPNTCR: MI A,15 + X TYO + MI A,12 + X TYO + J SPNT + +OCTP: ILDB A,U3 + ADDI A,"0 + PUSHJ P,TYO + TLNE U3,770000 + JRST OCTP + POPJ P, + +TYOS: MOVEI A,40 +TYO: DATAI + TLNE 200000 + POPJ P, +XTYO: CONSZ TTY,20 + JRST .-1 + DATAO TTY,A +CPOPJ: POPJ P, + +TYI: CONSO TTY,40 + JRST .-1 + DATAI TTY,A + ANDI A,177 + JRST XTYO + +UUOH2: PUSHJ P,CRR + PUSH P,U2 + HRRZ U2,UUOH + LDB U1,[410300,,-2(U2)] + CAIGE U1,3 + SOJG U2,.-2 ;SCAN BACK FOR LAST 3XX OR GREATER + LDB U1,[270400,,-2(U2)] + MOVE U4,UACS(U1) + MOVEM U4,FOO1 + MOVE U4,@-2(U2) + MOVEM U4,FOO2 + MOVE U2,[440700,,[.ASCII ? AC *!FOO1 MEM *!FOO2 ?]] + PUSHJ P,SPNT + POP P,U2 + SETOM ERRF +UUOH1: PUSHJ P,SPNT + LPM UUOHM +UUOEX: MOVE A,UUOH + TLNE A,LSRMOD + JRST UUOEX1 + MOVE A,PISAV + ANDI A,377 + CONO PI,2000(A) + MOVSI 17,UACS + BLT 17,17 + JRST 2,@UUOH + +FOO1: 0 +FOO2: 0 +UACS: BLOCK 20 +UPDL: BLOCK 40 + + +SYMLOK: MI C,0 + SKIPN E,DDTLOC + R + SKIPN E,-2(E) + R + MI B,0 +SYMLUP: M D,1(E) + CAMG D,A + CAMG D,B + JRST SYML1 + SKIPGE (E) ;FLUSH HALF KILLED SYMBOLS + JRST SYML1 + M B,1(E) + M C,(E) +SYML1: ADD E,[1,,1] + AOBJN E,SYMLUP + SUB A,B + M B,C +POPJ1: AOS (P) + R + + +APRBRK: 0 + MOVEM 17,APRBAC+17 + MOVEI 17,APRBAC + BLT 17,APRBAC+16 + MI P,APRPDL-1 + SPM APRBP ;REAL THING STORE AWAY + PUSH P,40 + PUSH P,UUOH + CONSO 60000 + JRST APRET + SKIPE INTLOC + JRST @INTLOC +APRET: PUSHJ P,CRR +APRT1: SKIPE U2,TAGADR + X SPNT + SETZM TAGADR + CONSZ 20000 + OUTSTR [ UNEXPECTED MEMPROTECT INTERRUPT ] + CONSZ 10000 + OUTSTR [ UNEXPECTED NXM ] + CONSZ 40000 + OUTSTR [ UNEXPECTED QUANTUM OVERFLOW ] + MOVE A,APRBRK + TLNE A,LSRMOD + JRST APRT2 + HRRZS A + PUSHJ P,SYMLOK + JRST APRT2 + OUTSTR [AT &!B +#!A _] +APRT2: HRRZ A,APRBRK + HRRZ B,APRBP+1 + OUTSTR [INTERRUPT PC= #!A, OPC= #!B _] + MOVE A,APRBP+1 + AOS A + HRRZM A,APRBRK + LDB A,[221500,,A] + DPB A,[271500,,APRBRK] + HLLZ C,APRBP+3 + X TYPFLT + TLZ C,4 + CONSZ 20000 + ANDCAM C,APRBP+3 + CONSZ 200000 + OUTSTR [PDL OV ] + CONSZ PI,200000 + OUTSTR [PARITY ERROR ] + CONO 470000+APRCHN + CONO PI,200000 + X CRR + OUTSTR [_CONTINUE? ] + X TYI + CAIE A,"Y + JRST GIVEUP + POP P,UUOH + POP P,40 + LPM APRBP + +APRBK2: CONO 470000+APRCHN ;RETURN FROM ONEPROCEED TEST + CONO PI,200000 + MOVSI 17,APRBAC + BLT 17,17 + JRST 12,@APRBRK + + +INTFLS: 0 + CLEARM INTLOC + POP P,UUOH + POP P,40 + CONO 60000+APRCHN + MOVSI 17,APRBAC + BLT 17,17 + JRST 12,@INTFLS + +APRBP: BLOCK 10 +APRBP1: BLOCK 10 +APRBAC: BLOCK 20 +APRPDL: BLOCK 10 + +CRR: MOVEI A,15 + PUSHJ P,TYO + MOVEI A,12 + JRST TYO + +TYPFLT: TLNE C,FMAR + OUTSTR [MAR,] + TLNE C,FNACC + OUTSTR [NO ACCESS,] + TLNE C,FPURE + OUTSTR [PURE,] + TLNE C,FRWF + OUTSTR [W IN RWF,] + TLNE C,FRDO + OUTSTR [W IN RD ONLY,] + TLNE C,FDBL + OUTSTR [DBL,] + TLNE C,FNXM + OUTSTR [PG FETCH ILM,] + TLNE C,FONPR + OUTSTR [ONE PROCEED,] + TLNE C,FNXM+FDBL+FRDO+FRWF+FPURE+FNACC+FMAR + POPJ P, + TLNN C,FFAULT + OUTSTR [NO FAULT] + TLNE C,FFAULT + OUTSTR [FAULT BUT NO ERROR BITS] + POPJ P, + +LP1: BLOCK 8 +SP1: BLOCK 8 +MSK1: 17777,,-1 + 17777,,-1 + 7,,-1 + 1777,,-1 + 377,,-1 + 377,,-1 + 377,,-1 + 3777,,-1 + +QTIME: 0 +MEMSIZ: 0 ;HIGHEST LOCATION EXISTANT +INTLOC: 0 ;IF NON ZERO, LOCATION OF ROUTINE TO HANDLE INTERRUPT +TADR: 0 +TINS: 0 +LMOD: 0 +OPPNR: 0 +XRAND: 0 ;TEMP RANDOM # FOR XCTR TEST +BCPGNO: 0 ;PAGE NO._-4 FOR B,C TESTS + +PTS1: 0 + 0 + 0 + EXR+1,,0 + 0 + 0 + 0 + TACS + + +NULPSW: 0?0?0 + 1,, + 0?0?0?0 + +UPG: 0 + 0 + 0 + 1,, + 2,,[RW+TPG_-10.,,] + 0 + 0 + TACS + +ERRF: 0 + +PTSPT1: BLOCK 200 + +PAT: +PATCH: BLOCK 100 +PDL: BLOCK 100 +CONSTA +VARIAB +NEXPAG=<.+1777>&-2000 + + +END BEG + \ No newline at end of file