TITLE SBSCOM -- Common module for Sub-Systems Components SUBTTL Chuck O'Toole 8 Aug 76 ;***Copyright (C) 1976, Digital Equipment Corp., Maynard, Mass.*** SEARCH SBSMAC ;PARAMETER FILE INTERN %%.SBS ;VERSION OF SBSMAC ; Entry points found in SBSCOM INTERN .ZPAGA ;Zero a page given its address in S1 INTERN .ZPAGN ;Zero a page given its page number in S1 INTERN .SAVE1 ;Co-routine to save P1 INTERN .SAVE2 ;Co-routine to save P1,P2 INTERN .SAVE3 ;Co-routine to save P1,P2,P3 INTERN .SAVE4 ;Co-routine to save P1,P2,P3,P4 INTERN .SAVET ;Co-routine to save T1,T2,T3,T4 INTERN .SV13 ;Co-routine to save 13 (use SAVE Macro) INTERN .SV14 ;Co-routine to save 14 (use SAVE Macro) INTERN .SV15 ;Co-routine to save 15 (use SAVE Macro) INTERN .SV16 ;Co-routine to save 16 (use SAVE Macro) INTERN .CALL1 ;Saves P1 then calls subroutine pointed to by S1 INTERN .CALL2 ;Saves P1,P2 then calls subroutine pointed to by S1 INTERN .CALL3 ;Saves P1,P2,P3 then calls subroutine pointed to by S1 INTERN .CALL4 ;Saves P1,P2,P3,P4 then calls subroutine pointed to by S1 INTERN .TRUE ;Set S1 = .TRUE. INTERN .FALSE ;Set S1 = .FALSE. INTERN .POPJ,.POPJ1,.T1PJ,.T2PJ,.T3PJ SALL SUBTTL .ZPAGA - .ZPAGN -- Zero out a page ;ROUTINES TO COMPLETELY ZERO A PAGE OF MEMORY. .ZPAGA IS ; CALLED WITH THE ADDRESS OF THE FIRST WORD OF THE PAGE ; IN S1 AND .ZPAGN IS CALLED WITH THE PAGE NUMBER IN S1. .ZPAGN: PG2ADR S1 ;CONVERT PAGE NUMBER TO ADR .ZPAGA: MOVS S2,S1 ;GET START,,0 IN S2 HRRI S2,1(S1) ;GET START,,START+1 IN S2 SETZM 0(S1) ;CLEAR OUT THE FIRST WORD BLT S2,777(S1) ;ZERO THE PAGE POPJ P, ;AND RETURN ;THESE ROUTINES ACT AS CO-ROUTINES WITH THE ROUTINES WHICH CALL THEM, ; THEREFORE NO CORRESPONDING "RESTORE" ROUTINES ARE NEEDED. WHEN ; THE CALLING ROUTINE RETURNS TO ITS CALLER, IT ACTUALLY RETURNS ; VIA THE RESTORE ROUTINES AUTOMATICALLY. .SAVE1: EXCH P1,(P) ;SAVE P1 GET CALLERS ADDRESS PUSH P,.+3 ;SAVE RETURN ADDRESS FOR CALLER HRLI P1,-1(P) ;MAKE IT LOOK LIKE RESULT OF JSA JRA P1,(P1) ;CALL THE CALLER CAIA . ;NON-SKIP RETURN AOS -1(P) ;SKIP RETURN JRST RES1 ;RESTORE P1 .SAVE2: EXCH P1,(P) ;SAVE P1 GET CALLERS ADDRESS PUSH P,P2 ;SAVE P2 PUSH P,.+3 ;SAVE RETURN ADDRESS HRLI P1,-2(P) ;SETUP FOR THE JRA JRA P1,(P1) ;CALL THE CALLER CAIA . ;NON-SKIP RETURN AOS -2(P) ;SKIP RETURN JRST RES2 ;RESTORE P2,P1 .SAVE3: EXCH P1,(P) ;SAVE P1 GET RETURN ADDRESS PUSH P,P2 ;SAVE P2 PUSH P,P3 ;SAVE P3 PUSH P,.+3 ;SAVE RETURN ADDRESS HRLI P1,-3(P) ;SETUP FOR JRA JRA P1,(P1) ;AND CALL THE CALLER CAIA . ;NON-SKIP AOS -3(P) ;SKIP RETURN JRST RES3 ;AND RESTORE P3,P2,P1 .SAVE4: EXCH P1,(P) ;SAVE P1 GET RETURN ADDRESS PUSH P,P2 ;SAVE P2 PUSH P,P3 ;SAVE P3 PUSH P,P4 ;SAVE P4 PUSH P,.+3 ;SAVE RETURN ADDRESS HRLI P1,-4(P) ;SETUP FOR RETURN JRA P1,(P1) ;AND RETURN CAIA . ;NON-SKIP RETURN AOS -4(P) ;SKIP RETURN RES4: POP P,P4 ;RESTORE P4 RES3: POP P,P3 ;RESTORE P3 RES2: POP P,P2 ;RESTORE P2 RES1: POP P,P1 ;RESTORE P1 POPJ P, ;AND RETURN .SAVET: EXCH T1,(P) ;SAVE T1 AND GET RETURN ADDRESS PUSH P,T2 ;SAVE T2 PUSH P,T3 ;SAVE T3 PUSH P,T4 ;SAVE T4 PUSH P,.+3 ;SAVE RETURN ADDRESS HRLI T1,-4(P) ;SETUP FOR JRA JRA T1,(T1) ;AND CALL THE CALLER CAIA . ;RETURN HERE ON NON-SKIP AOS -4(P) ;RETURN HERE ON SKIP POP P,T4 ;RESTORE T4 .T3PJ: POP P,T3 ;RESTORE T3 .T2PJ: POP P,T2 ;RESTORE T2 .T1PJ: POP P,T1 ;RESTORE T1 POPJ P, ;AND RETURN .POPJ1: AOS (P) ;CAUSE A SKIP .POPJ: POPJ P, ;AND RETURN .FALSE: TDZA S1,S1 ;SET S1 = 0 AND SKIP .TRUE: SETO S1, ;GET .TRUE. POPJ P, ;AND RETURN ;THESE ROUTINES ARE USED WHEN FOR EXAMPLE, A TOP-LEVEL ROUTINE IS GOING TO CALL ; ANOTHER ONE (e.g. Q$LOGOUT CALLING Q$CREATE) AND THE 'Px' REGS NEED TO BE SAVED ;CALLED WITH S1 = THE ROUTINE TO CALL AFTER SAVING THE APPROPRIATE REGS .CALL1: PUSHJ P,.SAVE1 ;SAVE P1 FIRST JRST (S1) ;NOW CALL THE SPECIFIED ROUTINE .CALL2: PUSHJ P,.SAVE2 ;SAVE P1,P2 FIRST JRST (S1) ;NOW CALL THE SPECIFIED ROUTINE .CALL3: PUSHJ P,.SAVE3 ;SAVE P1,P2,P3 FIRST JRST (S1) ;NOW CALL THE SPECIFIED ROUTINE .CALL4: PUSHJ P,.SAVE4 ;SAVE P4,P2,P3,P4 FIRST JRST (S1) ;NOW CALL THE SPECIFIED ROUTINE ; THESE ROUTINES ARE CALLED BY THE SAVE MACRO FOR ABSOLUTE AC'S ; 13,14,15, & 16. THE MACRO FIGURES OUT WHICH ONE .SV13: EXCH 13,(P) ;SAVE 13 GET CALLERS ADDRESS PUSH P,.+3 ;SAVE RETURN ADDRESS FOR CALLER HRLI 13,-1(P) ;MAKE IT LOOK LIKE RESULT OF JSA JRA 13,(13) ;CALL THE CALLER CAIA . ;NON-SKIP RETURN AOS -1(P) ;SKIP RETURN POP P,13 ;RESTORE 13 POPJ P, ;AND RETURN .SV14: EXCH 14,(P) ;SAVE 14 GET CALLERS ADDRESS PUSH P,.+3 ;SAVE RETURN ADDRESS FOR CALLER HRLI 14,-1(P) ;MAKE IT LOOK LIKE RESULT OF JSA JRA 14,(14) ;CALL THE CALLER CAIA . ;NON-SKIP RETURN AOS -1(P) ;SKIP RETURN POP P,14 ;RESTORE 14 POPJ P, ;AND RETURN .SV15: EXCH 15,(P) ;SAVE 15 GET CALLERS ADDRESS PUSH P,.+3 ;SAVE RETURN ADDRESS FOR CALLER HRLI 15,-1(P) ;MAKE IT LOOK LIKE RESULT OF JSA JRA 15,(15) ;CALL THE CALLER CAIA . ;NON-SKIP RETURN AOS -1(P) ;SKIP RETURN POP P,15 ;RESTORE 15 POPJ P, ;AND RETURN .SV16: EXCH 16,(P) ;SAVE 16 GET CALLERS ADDRESS PUSH P,.+3 ;SAVE RETURN ADDRESS FOR CALLER HRLI 16,-1(P) ;MAKE IT LOOK LIKE RESULT OF JSA JRA 16,(16) ;CALL THE CALLER CAIA . ;NON-SKIP RETURN AOS -1(P) ;SKIP RETURN POP P,16 ;RESTORE 16 POPJ P, ;AND RETURN XLIST ;FORCED OUT LITERAL POOL HERE LIT LIST SALL END