.TITLE TSTPAT ; ; DEFINE SYSTEM MACRO CALLS .MCALL EXIT$S ;TEST =1 ;THIS PARAMETER DEFINED FOR TEST ONLY .IF DF,TEST ..REDT= 156342 ..SPD3= 154456 .ENDC H.DFSY=142 ;DEFINE OFFSET INTO TASK HEADER FOR DEFAULT SY PUD ENTRY .PSECT OVWRIT: BR ..URAL+2 ;BRANCH AROUND ENTRY POINT ..URAL: RTS PC CMP R5,@#.MCRPW ;IS THIS SY DEVICE? BEQ 2$ RTS PC 2$: MOV R0,-(SP) ;SAVE R0 FOR AWHILE MOV @#.CRTSK,R0 ;CURRENT TASK ATL PTR -> R0 ;ASSUME ALREADY MAPPED VIA APR3 ;INTO TASK HEADER TST @#H.DFSY+60000 ;IS DEFAULT SYSTEM DEVICE DEFINED? BNE 3$ ;IF SO, BRANCH MOV A.TI(R0),R0 ;GET TASK'S TI -> R0 MOV U.LBH(R0),@#H.DFSY+60000 ;PUT IN SY DEVICE 3$: MOV @#H.DFSY+60000,R5 ;GET PUD ADDRESS OF SY DEVICE -> R5 MOV (SP)+,R0 ;RESTORE SAVED R0 JMP @#..REDT ;AND GO REDIRECT SY DEVICE OVEND: PUDNAM: .ASCII /VC/ .ASCII /TT/ .ASCII /BP/ .ASCII /CL/ .ASCII /CI/ .ASCII /CO/ .ASCII /MO/ PDNMND: START: MOV #..REDT+14,R0 ;ADDRESS TO START PATCH MOV #OVWRIT,R1 ;ADDRESS OF CODE FOR PATCH MOV #/2,R2 ;LEN OF CODE (WORDS) 1$: MOV (R1)+,(R0)+ ;MOVE 'EM IN SOB R2,1$ JSR PC,FINDSD ;FIND DEFAULT SYSTEM DEVICE MOV .PUDBA,R0 ;START OF PUD -> R0 3$: CMP R0,.PUDEA ;AT END YET? BHIS 7$ ;IF SO, GO FINISH MOV #/2,R2 ;LEN OF TABLE (WORDS) -> R2 MOV (R0),R3 ;DEVICE NAME -> R3 MOV #PUDNAM,R1 ;TABLE ADDRESS -> R1 2$: CMP R3,(R1)+ ;MATCH TABLE ENTRY? BEQ 4$ ;IF SO, DO SOMETHING SOB R2,2$ ;ELSE GO THROUGH NAME TABLE CMP R3,#"SY ;IS THIS THE "SY" PUD? BEQ 6$ ;IF SO, SPECIAL TREATMENT 5$: ADD #U.SZ,R0 ;POINT TO NEXT PUD BR 3$ ;AND DO IT OVER AGAIN 4$: MOV .MCRPW+2,U.LBH(R0) ;PUT IN DEFAULT SY DEVICE BR 5$ 6$: MOV R0,.MCRPW ;STORE SY PUD ADDRESS BR 5$ 7$: EXIT$S FINDSD: MOV .PUDBA,R0 ;START OF PUD -> R0 1$: CMP R0,.PUDEA ;AT END OF PUDS? BHIS 2$ ;IF SO, CRASH THE PROGRAM CMP (R0),#DEV.DF ;IS THIS THE DEFAULT DEVICE NAME? BEQ 3$ ;IF SO, INVESTIGATE FURTHER 4$: ADD #U.SZ,R0 ;GET TO NEXT PUD BR 1$ 2$: .WORD 1 ;MAKE ODD ADDRESS ERROR 3$: CMPB 2(R0),#DEV.UN ;PROPER UNIT? BNE 4$ ;IF NOT, KEEP TRYING MOV R0,.MCRPW+2 ;IF SO, STORE PUD ADDRESS RTS PC .END START