Google
 

Trailing-Edge - PDP-10 Archives - bb-d868a-bm - 3-sources/sbscom.mac
There are 4 other files named sbscom.mac in the archive. Click here to see a list.
TITLE	SBSCOM  --  Common module for Sub-Systems Components
SUBTTL	Chuck O'Toole	8 Aug 76

	SEARCH	SBSMAC		;PARAMETER FILE

	INTERN	%%.SBS		;VERSION OF SBSMAC



;COPYRIGHT (C) 1976, 1977, 1978 BY
;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
;
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY  OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF THE  SOFTWARE  IS  HEREBY
;TRANSFERRED.
;
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT  NOTICE
;AND  SHOULD  NOT  BE  CONSTRUED  AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY  OF  ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

;	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