1
0
mirror of https://github.com/PDP-10/its.git synced 2026-01-22 18:42:15 +00:00
2018-02-15 07:12:46 -08:00

2617 lines
41 KiB
Groff
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;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)=*!<TPG+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)=*!<APRBP+2> -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