;TEST PROGRAM FOR 2900 GPC INTERFACE ;THERE ARE TWO VERSIONS OF THIS PROGRAM ;DEFINE 'PCVSN' TO TEST PC CARD ;UPDATED 03/08/79..MANY CHANGES ON OPERABLE, OP CHANGE, ; PARITY ERROR, RESET ETC. ;UPDATED 13/02/78 TO DO 10 BIT TRANSFERS USING PARITY LOGIC ;UPDATED 27/01/78 FOR 'FETCH NEXT' MODIFICATIONS ; ;OPERATING INSTRUCTIONS ;ATTACH LOOP BACK PLUG TO GPC INTERFACE ;SET CORRECT BUS ADDRESS AND VECTOR ADDRES IN LOCATIONS 1004 AND 1006 ;ENSURE MACHINE HAS A LINE TIME CLOCK AT LOCATION 777546, ; VECTOR ADDRESS 100 ;ENSURE MACHINE HAS A TELETYPE AT LOCATION 177560 ;PROGRAM START ADDRESS IS 1000 ;SET BITS IN SWITCH REGISTER AS FOLLOWS: ; 0..DISABLE TEST 1 (REGISTER TEST) ; 1..DISABLE TEST 2 ( 9 BIT DATA EXERCISOR) ; 2..DISABLE TEST 3 (10 BIT DATA EXERCISOR) ; 3..DISABLE TEST 4 ( 9 BIT DATA TEST WITH INTERRUPTS) ; 4..DISABLE TEST 5 (10 BIT DATA TEST WITH INTERRUPTS) ;14..HALT AFTER ERROR PRINTOUT ;15..DISABLE ERROR PRINT OUT ;SWITCH REGISTER BITS MAY BE CHANGED WHILE TEST IS RUNNING ;PROGRAM WILL TYPE * AFTER EVERY 20. PASSES. ;THE PROGRAM SETS THE NUMBER OF FAULTS SINCE PROGRAM STARTED ; IN R0 WHEN RESET IS EXECUTED. ;THIS NUMBER MAY BE VISIBLE IN THE LIGHTS ; ;ON ERROR, PROGRAM TYPES PC & REGS ; REFER TO LISTING TO DETERMINE REASON ; PRESS CONTINUE TO PROCEED ; ; ;ICSR BITS ; 0..R...CONTROL..9TH BIT ; 1..RW..FETCH NEXT ; ALWAYS READS AS ZERO UNDER TEST CONDITIONS. ; 2...W..RESET..LOGIC HELD RESET WHEN THIS BIT SET ; 3..R...RXFY..RX CONTROL OUT ; 4..RW..LATCHED XOP..1=CHANGE ; 5..R...CURRENT XOP ; WIRE WRAP VSN..1=NOT OPERABLE ; PC VSN.........1=OPERABLE ; 6..RW..INTERRUPT ENABLE ; 7..R...DONE ;15..R...BAD PARITY ; ;OCSR BITS ; 0..RW..CONTROL..9TH BIT ; 1..RW..PARITY..SET FOR BAD PARITY OUT ; 2..RW..TXYOP..OPERABLE OUT ; 3..R...TXFY..TX CONTROL OUT ; 4..R...ACFX..CONTROL IN..PC VSN ONLY ; 5..R...SCFX..CONTROL IN..PC VSN ONLY ; 6..RW..INTERRUPT ENABLE ; 7..R...DONE ; ;NOTES 3/08/79 ;ANY CHANGE IN XOP SETS LATCHED XOP, AND CAUSES INTERRUPT. ;AFTER THIS, LATCHED XOP SHOULD BE CLEARED - TO REMOVE INTERRUPT SOURCE. ;RESET BIT DOES NOT CHANGE TXYOP AND XOP CHANGE. ;IF PARITY ERROR, THEN READING DATA SHOULD NOT ACCEPT IT. ; .ABSOLUTE PCVSN=1 ;ICSR..(R5) IDAT=2 ;IDAT..2(R5) OCSR=4 ;OCSR..4(R5) ODAT=6 ;ODAT..6(R5) ; HLT=4 ;IOT CONSAD=177560 SWR=177570 ;INPUT SWITCH REGISTER PS=177776 CLKREG=177546 CLKVEC=100 ; ;WIRE WRAP VSN .IFNDF PCVSN INOP=40 OPER=0 ACFX=0 SCFX=0 INTCLR=100 .ENDC ;PC VSN .IFDF PCVSN INOP=0 OPER=40 ACFX=20 SCFX=40 INTCLR=0 .ENDC ; .=1000 LSTBAS: ;START OF CONSTANT AREA JMP START ; BUSAD:175170 ;BUS ADDRESS OF ICSR VECAD:170 ;VECTOR ADDRESS LPCNT:0 MSK3:.WORD 001442 ;FRACTION OF TIME5 FOR TIME3..1 M.S. MSK1:.WORD 001442 ;FRACTION OF TIME5 FOR TIME1..1 M.S. TIME3:0 ;MINIMUM TIME OPERABLE SHOULD BE DELAYED TIME1:0 ;TIME AFTER THAT DURING WHICH OPERABLE SHOULD SET TIME5:0 ;USED AS DATA BY TIME CALIBRATION ROUTINE PASCNT:0 ININTP:0 ;NO OF INPUT INTERRUPTS EXPECTED UTINTP:0 ;NO OF OUTPUT INTERRUPTS EXPECTED IGNRE:0 ;BITS TO IGNORE IN FIRST TEST OF PC BOARD ; .WORD -1,0,-2,20,60,200 .WORD 400,2,767,4,776,677,777 PTEX1:TSTB CONSAD+4 BPL PTEX1 MOVB (R1)+,CONSAD+6 PTEXT:TSTB (R1) BNE PTEX1 RTS PC ; STMS:.BYTE 200,200,15,12 .ASCII /TEST PROGRAM FOR 2900 GPC INTERFACE PC1129/ .BYTE 15,12 .IFNDF PCVSN .ASCII /WIRE WRAP VSN - MOD LEVEL 10/ .ENDC .IFDF PCVSN .ASCII /PRINTED CIRCUIT VSN...PROG#3/ .BYTE 15,12,377,377,0 ENDMS:.BYTE '*,377,377,0 .EVEN ; WAITOP: ;WAIT FOR OPERABLE..USES R1 MOV TIME1,TIME2 MOV TIME3,TIME4 WAIT3: MOV (R5),R1 BIC #177737,R1 CMP R1,#OPER BEQ WAIT4 ;OPERABLE TOO SOON DEC TIME4 BNE WAIT3 WAIT1: MOV (R5),R1 BIC #177737,R1 CMP R1,#OPER BEQ WAIT2 ;OPERABLE DEC TIME2 BNE WAIT1 WAIT2: RTS PC WAIT4:HLT ;OPERABLE TOO SOON RTS PC TIME2:0 ;DATA FOR WAITOP ROUTINE TIME4:0 ;DATA FOR WAITOP ROUTINE ; START: MOV #1000,SP ;STACK POINTER CLR PASCNT CLR FLTCNT MOV #776,R0 ST0:CLR (R0) ;CLEAR OUT UNUSED VECTORS MOV R0,-2(R0) SUB #4,R0 BPL ST0 MOV #STMS,R1 JSR PC,PTEXT MOV #FAULT,@#20 ;SET UP FAULT HANDLING VECTOR MOV #340,@#22 MOV VECAD,R0 ;SET UP VECTOR MOV #ININT,(R0)+ MOV #340,(R0)+ MOV #UTINT,(R0)+ MOV #340,(R0)+ ;CALIBRATE CLOCK CLR TIME5 MOV BUSAD,R5 MOV #0,CLKVEC+2 MOV #CLKI1,CLKVEC MOV #0,PS MOV #100,CLKREG ;ENABLE CLOCK BR . ;WAIT FOR CLOCK INT ; CLKI1:MOV #CLKI2,CLKVEC CLKI3:MOV (R5),R1 BIC #177737,R1 CMP R1,#OPER BEQ .+2 DEC TIME5 BNE CLKI3 HLT ;ONLY ONE CLOCK INT! ; CLKI4: ;UNEXPECTED CLOCK INTERRUPT HLT CLKI2:MOV #0,CLKREG ;KILL CLOCK MOV #1000,SP ;RESET STACK MOV #CLKI4,CLKVEC MOV TIME5,R0 NEG R0 ;20 MS CLR TIME1 CLR TIME3 MOV MSK1,R1 MOV MSK3,R3 CILP:ASL R1 BPL .+6 ADD R0,TIME1 ASL R3 BPL .+6 ADD R0,TIME3 ASR R0 BNE CILP START1:MOV BUSAD,R5 ;BUS ADDRESS MOV #20.,LPCNT ;SET UP INTERATION COUNT ;TEST INITIAL BIT SETTINGS AND LOAD AND CLEAR OF INTERRUPT BIT TEST1:BIT #1,@#SWR BEQ .+6 JMP TEST2 MOV #10,R4 ;LOOP COUNT FOR TEST 0 MOV #0,UTINTP MOV #0,ININTP MOV #200,PS T00: MOV FLTCNT,R0 RESET MOV OCSR(R5),R1 BIC IGNRE,R1 CMP R1,#200+ACFX BEQ .+4 HLT MOV (R5),R1 CMP R1,#10+INOP BEQ .+4 HLT MOV #4,OCSR(R5) ;SET OPERABLE OUT MOV OCSR(R5),R1 BIC IGNRE,R1 CMP R1,#204+ACFX BEQ .+4 HLT ;OPERABLE OUT DIDN'T SET JSR PC,WAITOP ;WAIT FOR IT MOV (R5),R1 CMP R1,#30+OPER ;CHECK NOW OPERABLE+OPERABLE CHANGE BEQ .+4 HLT ;OPERABLE IN DIDN'T SET MOV #0,(R5) ;CLEAR OPERABLE CHANGE MOV (R5),R1 CMP R1,#10+OPER BEQ .+4 HLT MOV #177773,(R5) MOV (R5),R1 CMP R1,#110+OPER BEQ .+4 HLT MOV #0,(R5) MOV (R5),R1 CMP R1,#10+OPER BEQ .+4 HLT MOV #-1,OCSR(R5) MOV OCSR(R5),R1 BIC IGNRE,R1 CMP R1,#307+ACFX BEQ .+4 HLT MOV #0,OCSR(R5) MOV OCSR(R5),R1 BIC IGNRE,R1 CMP R1,#200+ACFX BEQ .+4 HLT MOV (R5),R1 CMP R1,#30+INOP ;INOP+OPERABLE CHANGE BEQ .+4 HLT MOV #4,OCSR(R5) ;SET OUTPUT OPERABLE JSR PC,WAITOP MOV (R5),R1 CMP R1,#30+OPER ;SHOULD BE OPERABLE+OPERABLE CHANGE BEQ .+4 HLT MOV #177771,(R5) ;SHOULD NOT EFFECT OP CHANGE MOV (R5),R1 CMP R1,#130+OPER BEQ .+4 HLT MOV #20,(R5) ;SHOULD NOT EFFECT OP CHANGE MOV (R5),R1 CMP R1,#30+OPER BEQ .+4 HLT MOV #24,(R5) ;RESET INTERFACE MOV BUSAD,BUSAD ;DELAY MOV #20,(R5) ;REMOVE RESET MOV BUSAD,BUSAD MOV #22,(R5) ;FETCH NEXT MOV OCSR(R5),R1 BIC IGNRE,R1 CMP R1,#204+ACFX BEQ .+4 HLT ;OUTPUT SIDE DID NOT RESET MOV (R5),R1 CMP R1,#30+OPER BEQ .+4 HLT ;INPUT DID NOT RESET MOV #200,PS MOV #120,(R5) MOV #107,OCSR(R5) MOV #377,ODAT(R5) MOV #124,(R5) ;ISSUE RESET MOV @#CONSAD,R3 MOV #120,(R5) ;CLEAR RESET MOV @#CONSAD,R3 MOV (R5),R3 CMP R3,#30+OPER+INTCLR BEQ .+4 HLT ;RESET SHOULD NOT CLEAR INT ENB, SHOULD CLEAR CONTROL MOV IDAT(R5),R3 BEQ .+4 HLT ;RESET HAS NOT CLEARED DATA MOV OCSR(R5),R3 BIC IGNRE,R3 CMP R3,#4 ;RESET SHOULD CLEAR INT ENB ETC, BUT NOT OPERABLE BEQ .+4 HLT MOV #377,ODAT(R5) MOV IDAT(R5),R3 ;READ DATA, BUT DO NOT REQ NEXT. MOV #4,(R5) ;ISSUE RESET CMP @#CONSAD,R3 MOV #0,(R5) ;CLEAR RESET MOV @#CONSAD,R3 MOV OCSR(R5),R3 BIC IGNRE,R3 CMP R3,#204+ACFX ;CHECK DONE BIT NOW UP BEQ .+4 HLT DEC R4 BEQ .+6 JMP T00 MOV #4,(R5) ;SET RESET..RESET INSTR SHOULD CLEAR IT TEST2:BIT #2,@#SWR BEQ .+6 JMP TEST3 MOV FLTCNT,R0 RESET MOV #0,PS ; ;EXERCISOR TEST. USE PROGRAM AS DATA ;9 BIT TEST..NO PARITY ERRORS MOV #4,OCSR(R5) ;SET OPERABLE JSR PC,WAITOP MOV (R5),R1 CMP R1,#30+OPER BEQ .+4 HLT ;OPERABLE DID NOT SET MOV #0,(R5) ;CLEAR OP CHANGE MOV #LSTBAS,R0 LP:MOV (R0)+,R1 ;PICK UP DATA WORD ADD PASCNT,R1 BIC #177000,R1 ;9 BITS MOV #4,R2 ;OPERABLE BIT BIT #400,R1 BEQ T11 BIS #1,R2 ;CONTROL BIT T11:BIT #1000,R1 BEQ T12 BIS #2,R2 ;SET PARITY T12:MOV R2,OCSR(R5) TSTB (R5) BPL .+4 HLT ;DONE ALREADY UP MOV R1,ODAT(R5) TSTB OCSR(R5) BPL .+4 HLT ;DONE SHOULD NOT BE UP MOV (R5),R4 TSTB R4 BMI .+4 HLT ;NO DONE MOV IDAT(R5),R3 TSTB (R5) BPL .+4 HLT ;DONE DID NOT CLEAR TSTB OCSR(R5) BPL .+4 HLT ;DONE SET TOO SOON MOV #22,(R5) ;ENABLE NEXT TSTB OCSR(R5) BMI .+4 HLT ;NO DONE TST R4 BPL .+4 HLT ;BAD PARITY RECEIVED BIT #1,R4 BEQ T14 BIS #400,R3 ;CONTROL BIT T14:CMP R1,R3 BEQ .+4 HLT CMP R0,#ENDLST BNE LP ; TEST3:BIT #4,@#SWR BEQ .+6 JMP TEST4 MOV FLTCNT,R0 RESET ;EXERCISOR TEST. USE PROGRAM AS DATA ;10 BIT TEST..WITH BAD PARITY ;THIS TEST CHECKS CONTROL BITS MOV #0,OCSR(R5) ;SET INOP FIRST MOV #4,OCSR(R5) ;SET OPERABLE JSR PC,WAITOP MOV (R5),R1 CMP R1,#30+OPER BEQ .+4 HLT ;OPERABLE DID NOT SET MOV #0,(R5) ;CLEAR OPERABLE CHANGE MOV #LSTBAS,R0 LP5:MOV (R0)+,R1 ;PICK UP DATA WORD ADD PASCNT,R1 BIC #176000,R1 ;10 BITS MOV #4,R2 ;OPERABLE BIT BIT #400,R1 BEQ T51 BIS #1,R2 ;CONTROL BIT T51:BIT #1000,R1 BEQ T52 BIS #2,R2 ;SET PARITY T52:MOV R2,OCSR(R5) MOV (R5),R2 BIC #100001,R2 ;IGNORE DATA CMP R2,#10+OPER BEQ .+4 HLT ;DONE ALREADY UP MOV R1,ODAT(R5) MOV OCSR(R5),R2 BIC IGNRE,R2 BIC #3,R2 ;IGNORE DATA CMP R2,#14+ACFX+SCFX BEQ .+4 HLT ;DONE SHOULD NOT BE UP MOV (R5),R4 MOV R4,R2 BIC #100001,R2 CMP R2,#210+OPER BEQ .+4 HLT ;NO DONE MOV IDAT(R5),R3 TST R4 BPL T55 ;NO PARITY ERROR MOV (R5),R2 BIC #1,R2 ;CLEAR CONTROL CMP R2,#100210+OPER BEQ .+4 HLT MOV OCSR(R5),R2 BIC IGNRE,R2 BIC #1,R2 CMP R2,#16+ACFX+SCFX BEQ .+4 HLT MOV OCSR(R5),R2 BIC IGNRE,R2 BIC #177772,R2 ;EXTRACT CONTROL AND OPERABLE MOV R2,OCSR(R5) ;CLEAR BAD PARITY MOV IDAT(R5),R2 CMP R2,R3 BEQ .+4 HLT BIS #1000,R3 ;BAD PARITY RECEIVED T55: MOV (R5),R2 BIC #1,R2 CMP R2,#0+OPER BEQ .+4 HLT MOV OCSR(R5),R2 BIC IGNRE,R2 BIC #1,R2 CMP R2,#4 BEQ .+4 HLT MOV #22,(R5) ;ENABLE NEXT MOV OCSR(R5),R2 BIC IGNRE,R2 BIC #1,R2 ;CLEAR DATA CMP R2,#204+ACFX BEQ .+4 HLT ;NO DONE BIT #1,R4 BEQ T54 BIS #400,R3 ;CONTROL BIT T54:CMP R1,R3 BEQ .+4 HLT CMP R0,#ENDLST BNE LP5 ; TEST4:BIT #10,@#SWR BEQ .+6 JMP TEST5 ;INTERRUPT TEST ;9 BIT DATA AND EXCERCISOR TEST MOV FLTCNT,R0 RESET MOV #0,PS MOV #1,ININTP ;EXPECT INTERRUPT MOV #120,(R5) ;ENABLE INPUT AND OP CHANGE INTERRUPTS MOV @#CONSAD,R3 TST ININTP BNE .+4 HLT ;UNEXPECTED INTERRUPT OCCURRED MOV #4,OCSR(R5) ;SET OPERABLE JSR PC,WAITOP MOV (R5),R1 CMP R1,#130+OPER BEQ .+4 HLT ;OPERABLE DIDN'T SET TST ININTP BEQ .+4 HLT ;NO INT ON OP SET MOV #0,(R5) ;CLEAR OPERABLE CHANGE MOV #LSTBAS,R0 MOV #1,UTINTP ;INT WILL OCCUR WHEN INTS ENABLED MOV #104,OCSR(R5) MOV @#CONSAD,R1 TST UTINTP BEQ .+4 HLT ;INTERRUPT DID NOT OCCUR MOV #0,ININTP MOV #120,(R5) T40:MOV (R0)+,R1 ;PICK UP DATA WORD ADD PASCNT,R1 BIC #177000,R1 ;9 BITS MOV #104,R2 BIT #400,R1 BEQ T41 BIS #1,R2 ;CONTROL BIT T41:BIT #1000,R1 BEQ T42 BIS #2,R2 ;PARITY LINE T42:MOV R2,OCSR(R5) MOV @#CONSAD,R3 MOV #1,ININTP MOV R1,ODAT(R5) MOV @#CONSAD,R3 MOV @#CONSAD,R3 MOV ININTP,R3 BEQ .+4 HLT ;RECEIVER FAILED TO INTERRUPT MOV (R5),R4 MOV #1,UTINTP MOV IDAT(R5),R3 MOV #122,(R5) ;ENABLE FETCH NEXT TST R4 BPL .+4 HLT ;BAD PARITY RECEIVED BIT #1,R4 BEQ T44 BIS #400,R3 ;CONTROL BIT T44: MOV @#CONSAD,R4 MOV UTINTP,R4 BEQ .+4 HLT CMP R1,R3 BEQ .+4 HLT CMP R0,#ENDLST BNE T40 ;TEST FOR INTERRUPT ON INOP MOV #1,ININTP ;EXPECT INTERRUPT MOV #0,OCSR(R5) ;CLEAR OPERABLE MOV @#CONSAD,R3 MOV ININTP,R3 BEQ .+4 HLT ;INTERRUPT DID NOT OCCUR ON INOP TEST5:BIT #20,@#SWR BEQ .+6 JMP TEST6 ;INTERRUPT TEST ;10 BIT TEST..WITH PARITY ERRORS MOV FLTCNT,R0 RESET MOV #0,PS MOV #1,ININTP ;EXPECT INTERRUPT MOV #120,(R5) ;ENABLE INPUT AND OP CHANGE INTERRUPTS MOV @#CONSAD,R3 TST ININTP BNE .+4 HLT ;UNEXPECTED INTERRUPT OCCURRED MOV #4,OCSR(R5) ;SET OPERABLE JSR PC,WAITOP MOV (R5),R1 CMP R1,#130+OPER BEQ .+4 HLT ;OPERABLE DIDN'T SET TST ININTP BEQ .+4 HLT ;NO INT ON OP SET MOV #0,(R5) ;CLEAR OPERABLE CHANGE MOV #LSTBAS,R0 MOV #1,UTINTP ;INT WILL OCCUR WHEN INTS ENABLED MOV #104,OCSR(R5) MOV @#CONSAD,R1 TST UTINTP BEQ .+4 HLT ;INTERRUPT DID NOT OCCUR MOV #0,ININTP MOV #120,(R5) T60:MOV (R0)+,R1 ;PICK UP DATA WORD ADD PASCNT,R1 BIC #176000,R1 ;10 BITS MOV #104,R2 BIT #400,R1 BEQ T61 BIS #1,R2 ;CONTROL BIT T61:BIT #1000,R1 BEQ T62 BIS #2,R2 ;PARITY LINE T62:MOV R2,OCSR(R5) MOV @#CONSAD,R3 MOV #1,ININTP MOV R1,ODAT(R5) MOV @#CONSAD,R3 MOV @#CONSAD,R3 MOV ININTP,R3 BEQ .+4 HLT ;RECEIVER FAILED TO INTERRUPT MOV (R5),R4 MOV IDAT(R5),R3 TST R4 BPL T65 MOV OCSR(R5),R2 BIC IGNRE,R2 BIC #177672,R2 ;CLEAR BAD PARITY MOV R2,OCSR(R5) MOV @#CONSAD,R2 MOV (R5),R4 MOV IDAT(R5),R2 CMP R2,R3 ;CHECK HASN'T CHANGED..READ AGAIN BEQ .+4 HLT BIS #1000,R3 ;BAD PARITY REC T65:MOV #1,UTINTP ;EXPECT OUTPUT COMPLETE MOV #122,(R5) ;ENABLE FETCH NEXT TST R4 BPL .+4 HLT ;BAD PARITY RECEIVED BIT #1,R4 BEQ T64 BIS #400,R3 ;CONTROL BIT T64: MOV @#CONSAD,R4 MOV UTINTP,R4 BEQ .+4 HLT CMP R1,R3 BEQ .+4 HLT CMP R0,#ENDLST BNE T60 ;TEST FOR INTERRUPT ON INOP MOV #1,ININTP ;EXPECT INTERRUPT MOV #0,OCSR(R5) ;CLEAR OPERABLE MOV @#CONSAD,R3 MOV ININTP,R3 BEQ .+4 HLT ;INTERRUPT DID NOT OCCUR ON INOP TEST6:INC PASCNT DEC LPCNT BEQ .+6 JMP TEST1 MOV #ENDMS,R1 JSR PC,PTEXT JMP START1 ; ININT: ;INPUT INTERRUPT TST ININTP BNE .+4 HLT ;INTERRUPT NOT EXPECTED DEC ININTP RTI ; UTINT: ;OUTPUT INTERRUPT TST UTINTP BNE .+4 HLT ;INTERRUPT NOT EXPECTED DEC UTINTP RTI ; ;TRAP CATCHER..PC,PS ON STACK ; PSYM:TSTB @#CONSAD+4 BPL PSYM MOVB R0,@#CONSAD+6 RTS PC ; TOCT: ;CALLED WITH VALUE IN R1 MOV #6,R2 CLR R0 BR TOCT1 TOCT2:CLR R0 ASL R1 ROL R0 ASL R1 ROL R0 TOCT1:ASL R1 ROL R0 ADD #60,R0 JSR PC,PSYM DEC R2 BNE TOCT2 MOV #40,R0 JSR PC,PSYM RTS PC ; ; FAULT:INC FLTCNT BIT #100000,@#SWR BEQ .+4 RTI ;IGNORE FAULT REPORT IF BIT SET TST -(SP) MOV SP,(SP) ;MACHINE INDEPENDENT CODE ADD #6,(SP) ;SP AT TIME OF TRAP MOV R5,-(SP) MOV R4,-(SP) MOV R3,-(SP) MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) MOV #TBL2,TRPDAT TRPLP:MOV TRPDAT,R0 MOV TBL1-TBL2(R0),R1 JSR PC,PTEXT MOV TRPDAT,R0 MOV (R0)+,R1 BMI TRPEND MOV R0,TRPDAT ADD SP,R1 MOV (R1),R1 JSR PC,TOCT BR TRPLP TRPEND:MOV BUSAD,R5 MOV (R5),R1 ;ICSR JSR PC,TOCT MOV #TTXT11,R1 ;'OCSR=' JSR PC,PTEXT MOV BUSAD,R5 MOV 4(R5),R1 ;OCSR JSR PC,TOCT MOV #TTXT12,R1 ;CRLF-END JSR PC,PTEXT MOV (SP)+,R0 ;RESTORE REGS MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 MOV (SP)+,R5 TST (SP)+ BIT #040000,@#SWR BEQ .+4 HALT RTI ; TTXT1:.BYTE 15,12 .ASCII /TEST FAILED..PC=/ .BYTE 0 TTXT2:.ASCII /PS=/ .BYTE 0 TTXT3:.BYTE 15,12 .ASCII /R0=/ .BYTE 0 TTXT4:.ASCII /R1=/ .BYTE 0 TTXT5:.ASCII /R2=/ .BYTE 0 TTXT6:.ASCII /R3=/ .BYTE 0 TTXT7:.BYTE 15,12 .ASCII /R4=/ .BYTE 0 TTXT8:.ASCII /R5=/ .BYTE 0 TTXT9:.ASCII /SP=/ .BYTE 0 TTXT10:.BYTE 15,12 .ASCII /ICSR=/ .BYTE 0 TTXT11:.ASCII /OCSR=/ .BYTE 0 TTXT12:.BYTE 15,12 .BYTE 200,200,0 ; .EVEN ; TBL1:TTXT1 TTXT2 TTXT3 TTXT4 TTXT5 TTXT6 TTXT7 TTXT8 TTXT9 TTXT10 ; TBL2:.WORD 16,20 .WORD 0,2,4,6 .WORD 10,12,14,-1 ; FLTCNT:0 TRPDAT:0 ;DATA FOR TRAP ROUTINE ; ENDLST: .END