; SUBROUTINE TO SWITCH THE CONSOLE TERMINAL. ; FILED--14-SEP-84, G. BEVER. ; ; CALLED BY: ; IERR=ISWTCH(ICSR,IVEC,MAPBIT,MAPBIT) ; WHERE: ; ICSR= 1ST CSR ADDRESS OF DEVICE TO SWITCH TO. ; IVEC= 1ST VECTOR ADDRESS OF DEVICE TO SWITCH TO. ; MAPBIT= COMPLEX MASK BASED ON IVEC. ; MASK= COMPLEX MASK BASED ON IVEC. ; ; IERR= -1 IF UNABLE TO SWITCH. ; 0 IF SWITCH OK. ; .MCALL .MTPS,.PRINT .LIST MEB SYSGEN = 372 ; OFFSET TO SYSGEN WORD. MTTY$ = 20000 ; MULTI-TERMINAL BIT IN SYSGEN WORD. ISWTCH::TST (R5)+ ; SKIP PAST '# OF PARAMS' VALUE. ; CLR R2 ; RESET INDEX PTR. CLR R3 ; RESET CSR ADDRESS. MOV @(R5)+,CSR(R2) ; GET 1ST CSR ADDRESS. MOVE TO CSR TABLE. TST (R2)+ ; INC R2. MOV @#CSR,R3 ; SAVE CSR. .REPT 3 ADD #2,R3 MOV R3,CSR(R2) ; PUT NEXT CSR ADDRESS INTO TABLE. TST (R2)+ ; INC R2. .ENDR MOV @(R5)+,CSR(R2) ; GET VECTOR PARAMETER. ; MOV @#54,R0 ; R0 => RMON BIT #MTTY$,SYSGEN(R0) ; MULTI-TERMINAL SYSTEM? BNE 2$ ; YES - CAN'T USE THIS TECHNIQUE! .MTPS 7 ; NO - GO TO PRIORITY 7 !!! MOV R0,R2 ; SAVE R0 TEMPORARILY. ADD @(R5)+,R0 ; GET BITMAP. BISB @(R5)+,(R0) ; GET MASK. PROTECT NEW CONSOLE VECTORS. MOV R2,R0 ; RESTORE R0. ; ADD #304,R0 ; R0 => CONSOLE REGISTER LIST IN RMON. MOV #CSR,R1 ; R1 => NEW CSR/DATA REG LIST. CLR @(R0) ; DISABLE OLD INPUT CSR INTERRUPTS. MOV #100,@(R1) ; ENABLE NEW INPUT CSR INTERRUPTS. 1$: MOV (R1)+,(R0)+ ; MOVE IN NEW CSR/DATA REGISTER ADDR. TST @R1 ; DONE? BMI 1$ ; IF MINUS, NO... DO ANOTHER. MOV #60,R0 ; R0 = PRESENT CONSOLE VECTOR. MOV @R1,R1 ; R1 = NEW VECTOR. .REPT 4 MOV (R0)+,(R1)+ ; LOAD NEW CONSOLE VECTORS. .ENDR ; MOV (R0)+,(R1)+ ; LOAD NEW CONSOLE VECTORS. ; MOV (R0)+,(R1)+ ; LOAD NEW CONSOLE VECTORS. ; MOV (R0)+,(R1)+ ; LOAD NEW CONSOLE VECTORS. ; MOV (R0)+,(R1)+ ; LOAD NEW CONSOLE VECTORS. .MTPS 0 ; BACK TO PRIORITY 0. CLR R0 ; CLEAR ERROR FLAG. RTS PC ; RETURN. 2$: .PRINT #NOMT ; PRINT ERROR MESSAGE MOV #-1,R0 ; SET ERROR FLAG. RTS PC ; RETURN. .NLIST BEX NOMT: .ASCIZ /?MULTI-TERMINAL SYSTEM, USE SET TT CONSOL/ .EVEN CSR: .WORD 0 ; CSR/DATA BUFFER/VECTOR LIST. .WORD 0 .WORD 0 .WORD 0 .WORD 0 .END