;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