DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦635fb603a⟧

    Length: 19988 (0x4e14)
    Notes: pts_type(SC)
    Names: »TMOVE.SC«

Derivation

└─⟦f350e1b7a⟧ Bits:30009678 Philips computer tape "600219"
    └─⟦this⟧ »MONGEN/TMOVE.SC« 

PTS(SC)

	IDENT TMOVE 	REL 11.0 81-05-21 870105041100

			=4,CORR. OF UPDATE =3 (A14,A15)	=3 
			=4,REL 11.0 81-05-15	=3
			=3,CONDITION FOR MOVUU ADDED 
			=3,REL 11.0 81-01-26 
			=2,SAVE MMU WHEN MOVUS,MOVSU 
			=2,PRR 11.0 80-12-11 
			=1,MOVE LAST CHARACTER WHEN MOVUS
			=1,PRR 11.0 80-11-19 
* 
* 
**************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   TMOVE = TOSS MOVE LKM PROCESSOR 
* 
* 
* 
* 
* 
* 
**************************************************
* 
* 
*   THIS MODULE CONTAINS
*   THE MOVE LKM PROCESSOR
*   AND FOLLOWING SUBROUTINES:
* 
*   - MOVSS = MOVE FROM SYSTEM AREA TO SYSTEM AREA
*   - MOVUS = MOVE FROM USER AREA TO SYSTEM AREA
*   - MOVSU = MOVE FROM SYSTEM AREA TO USER AREA
*   - MOVUU = MOVE FROM USER AREA TO USER AREA
*   - MOVFW = MOVE FORWARD  (ONLY SYSTEM AREA,A14 RETURN) 
*   - MOVBW = MOVE BACKWARD (ONLY SYSTEM AREA,A14 RETURN) 
* 
	EJECT			TMOVE
* 
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	TMOVE	TOSS MOVE LKM PROCESSOR
	ENTRY	MOVSS	MOVE FROM SYSTEM TO SYSTEM 
	ENTRY	MOVSU	MOVE FROM SYSTEM TO USER 
	ENTRY	MOVUS	MOVE FROM USER TO SYSTEM 
	ENTRY	MOVUU	MOVE FROM USER TO USER 
	ENTRY	MOVFW	MOVE FORWARD 
*	ENTRY	MOVBW	MOVE BACKWARD 
	EJECT			TMOVE
* 
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	LKMQDI	QUEUE TASK AND DISPATCH 
	EXTRN	LKMRQE	SET A7=-1, QUEUE TASK AND DISPATCH
	EXTRN	FNDTID	FIND TTAB ADDRESS FROM TASK ID
	EXTRN	TTB:MT	DISPLACEMENT TO MMU TABLE 
	EJECT			TMOVE
* 
* 
***************************************** 
* 
*	CONDITIONAL ASSEMBLY
* 
***************************************** 
* 
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	1
* 
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 EQU 0.
* 
CPU852	EQU	0
* 
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET FOR CPU 857 IS OBTAINED BY SETTING CPU857 EQU 1.
* 
CPU857	EQU	1
* 
* 
*	A PROGRAM VERSION CONTAINING SUBROUTINE MOVUU 
*	WILL EXIST BY SETTING UUMOV=1 
* 
X:A	EQU	0		=3 
UUMOV	EQU	X:A		=3 
CPUHLP	EQU	CPU857+CPU857
	EJECT			TMOVE
* 
* 
************************
* MOVBLK DISPLACEMENTS *
************************
* 
*	DISPLACEMENTS IN MOVE PARAMETER BLOCK 
* 
MOVTIS	EQU	0	TASK ID SENDING TASK 
MOVTIR	EQU	2	TASK ID RECEIVING TASK 
MOVBAS	EQU	4	BUFFER ADDRESS SENDING TASK
MOVBAR	EQU	6	BUFFER ADDRESS RECEIVING TASK
MOVLEN	EQU	8	NUMBER OF BYTES TO MOVE
LENGTH	EQU	128	INTERMEDIATE BUFFER LENGTH WORDS 
* 
	EJECT			TMOVE
* 
* 
********* 
* TMOVE * 
********* 
* 
* 
*   THIS IS THE MOVE LKM PROCESSOR. 
* 
*   IT IS ENTERED FROM THE LKM HANDLER
*   WITH THE FOLLOWING PARAMETERS:
* 
*   A5 = TTAB ADDRESS 
*   A7 = MOVBLK ADDRESS 
* 
TMOVE	EQU	* 
	ENB
* 
	IFT	MMUPAG=0 
	LD	A1,MOVBAS,A7	SOURCE BUFFER ADDRESS
	LD	A2,MOVBAR,A7	DESTINATION BUFFER ADDRESS 
	LD	A3,MOVLEN,A7	BUFFER LENGTH
	CF	A15,MOVSS	MOVE BUFFER 
	XIF
* 
	IFT	MMUPAG=1 
	LDR	A12,A5	SAVE CALLING TTAB ADDRESS 
	LDR	A8,A7	SAVE MOVBLK ADDRESS
	EL	A1,MOVBAS,A8	BUFFER ADDRESS SENDING TASK
	EL	A10,MOVBAR,A8	BUFFER ADDRESS RECEIVING TASK 
	EL	A3,MOVLEN,A8	REQUESTED BUFFER LENGTH
	ELR	A7,A8	TASK ID SENDING TASK 
	CWK	A7,'#M'
	RF(E)	MOV100	MOVE FROM SYSTEM BUFFER 
	CF	A15,FNDTID	GET TTAB ADDRESS 
	LDR	A5,A2	SAVE TTAB ADDRESS
	RF(Z)	TTABNF	TTAB NOT FOUND
	EL	A7,MOVTIR,A8	IDENT RECEIVING TASK 
	CWK	A7,'#M'
	RF(E)	MVUS10	MOVE TO SYSTEM BUFFER 
	CF	A15,FNDTID	GET TTAB ADDRESS 
	LDR	A4,A2	SAVE TTAB ADDRESS
	RF(Z)	TTABNF	TTAB NOT FOUND
* 
	EJECT			TMOVE
* 
*	MOVE FROM USER BUFFER TO USER BUFFER
* 
	LDR	A2,A10	DESTINATION BUFFER ADDRESS
	CF	A15,MOVUU	MOVE FROM USER TO USER
	RF	END 
* 
*	TEST WHERE TO MOVE
* 
MOV100	EQU	*
	EL	A7,MOVTIR,A8	TASK ID RECEIVING TASK 
	CWK	A7,'#M'
	RF(E)	MVSS10	MOVE TO SYSTEM BUFFER 
	CF	A15,FNDTID	GET TTAB ADDRESS 
	LDR	A4,A2
	RF(Z)	TTABNF	TTAB NOT FOUND
* 
	EJECT			TMOVE
* 
*	MOVE FROM SYSTEM BUFFER TO USER BUFFER
* 
	LDR	A2,A10	DESTINATION BUFFER ADDRESS
	CF	A15,MOVSU	MOVE FROM SYSTEM TO USER
	RF	END 
* 
*	MOVE FROM USER BUFFER TO SYSTEM BUFFER
* 
MVUS10	EQU	*
	LDR	A2,A10	DESTINATION BUFFER ADDRESS
	CF	A15,MOVUS	MOVE FROM USER TO SYSTEM
	RF	END 
* 
*	MOVE FROM SYSTEM BUFFER TO SYSTEM BUFFER
* 
MVSS10	EQU	*
	LDR	A2,A10	DESTINATION BUFFER ADDRESS
	CF	A15,MOVSS	MOVE FROM SYSTEM TO SYSTEM
* 
	XIF
* 
	EJECT			TMOVE
* 
*	END 
* 
END	EQU	* 
	IFT	MMUPAG=1 
	LDR	A5,A12	TTAB CALLING TASK 
	XIF
* 
	ABL	LKMQDI	QUEUE TASK AND DISPATCH 
* 
	IFT	MMUPAG=1 
* 
*	TTAB NOT FOUND
* 
TTABNF	EQU	*
	LDR	A5,A12	TTAB ADDRESS
	ABL	LKMRQE	SET A7=-1, QUEUE TASK AND DISPATCH
	XIF
	EJECT
* 
* 
* 
********* 
* MOVFW * 
********* 
* 
* 
*	SUBROUTINE TO MOVE CHARACTERS 
*	FROM SYSTEM BUFFER TO SYSTEM BUFFER 
* 
*	ENTRY:  A1 = SYSTEM BUFFER ADDRESS,SOURCE 
*	        A2 = SYSTEM BUFFER ADDRESS,DESTINATION
*	        A3 = BUFFER LENGTH
* 
*	EXIT:   A1 = SYSTEM BUFFER ADDRESS,SOURCE+BUFFER LENGTH 
*	        A2 = SYSTEM BUFFER ADDRESS,DESTINATION+BUFFER LENGTH
*	        A3 = 0
* 
MOVFW	EQU	* 
MOVBW	EQU	* 
	ADK	A3,0 
	RF(NP)	RETA14	NOTHING TO MOVE,RETURN 
	STR	A4,A14	SAVE A4 
	ST	A5,-2,A14	SAVE A5 
	ST	A6,-4,A14	SAVE A6 
	LDKL	A6,/8000	INDICATE A14 RETURN
	RF	MSS005	MOVE BUFFER



RTNA14	EQU	*
	LD	A6,-4,A14	SAVED REGISTER
	LD	A5,-2,A14	SAVED REGISTER
	LDR*	A4,A14	SAVED REGISTER 
	LDK	A3,0 
RETA14	EQU	*
	RTN	A14
	EJECT			TMOVE
* 
* 
********* 
* MOVSS * 
********* 
* 
* 
*	SUBROUTINE TO MOVE CHARACTERS 
*	FROM SYSTEM BUFFER TO SYSTEM BUFFER 
* 
*	ENTRY:  A1 = SYSTEM BUFFER ADDRESS,SOURCE 
*	        A2 = SYSTEM BUFFER ADDRESS,DESTINATION
*	        A3 = BUFFER LENGTH
* 
*	EXIT:   A1 = SYSTEM BUFFER ADDRESS,SOURCE+BUFFER LENGTH 
*	        A2 = SYSTEM BUFFER ADDRESS,DESTINATION+BUFFER LENGTH
*	        A3 = 0
* 
	IFT	MMUPAG=0 
MOVUS	EQU	* 
MOVSU	EQU	* 
MOVUU	EQU	* 
	XIF
* 
MOVSS	EQU	* 
	ADK	A3,0	CHECK LENGTH
	RF(NP)	MOVRT2	NOTHING TO MOVE, RETURN
	STR	A4,A15	SAVE A4 
	STR	A5,A15	SAVE A5 
	STR	A6,A15	SAVE A6 
	LDK	A6,0	INDICATE A15 RETURN 
MSS005	EQU	*
	LDK	A4,1	MASK
	TM	A4,A1 
	RF(Z)	MSS100	SOURCE BUFFER ADDRESS EVEN
	TM	A4,A2 
	RF(Z)	MSS110	DESTINATION BUFFER ADDRESS EVEN 
	EJECT
* 
*	BOTH SOURCE AND DESTINATION BUFFER ADDRESS ODD
* 
	LCR	A5,A1	FIRST CHARACTER TO MOVE
	SCR	A5,A2	SAVE CHARACTER 
	ADK	A1,1	UPDATE SOURCE BUFFER ADDRESS
	ADK	A2,1	UPDATE DESTINATION BUFFER ADDRESS 
	SUK	A3,1	DECREMENT LENGTH
	RF(NP)	MOVRT1	ALL MOVED,RETURN 
* 
*	BOTH SOURCE AND DESTINATION BUFFER ADDRESS EVEN 
* 
MSS010	EQU	*
	IFF	CPUHLP+CPU852=2
	SUK	A3,2	SUBTRACT LENGTH 
	RF(N)	MSS020	TEST IF LAST CHARACTER IS MOVED 
	LDR*	A5,A1	GET WORD TO MOVE
	STR	A5,A2	SAVE WORD
	ADK	A1,2	UPDATE SOURCE BUFFER
	ADK	A2,2	UPDATE DESTINATION BUFFER 
	RB	MSS010	CONTINUE MOVE
* 
MSS020	EQU	*
	ADK	A3,2 
	RF(Z)	MOVRT1	ALL MOVED,RETURN
	XIF
* 
	IFT	CPU852=0 
	IFT	CPU857=1 
	TM	A4,A3 
	RF(Z)	MSS020	REQUESTED LENGTH EVEN 
	LDK	A4,0	INDICATE LENGTH ODD 
* 
MSS020	EQU	*
	MVB	A3	MOVE BUFFER 
	ADK	A4,0 
	RF(NZ)	MOVRT1	ALL MOVED,RETURN 
	XIF
* 
	LCR	A5,A1	LAST CHARACTER TO MOVE 
	SCR	A5,A2	STORE CHARACTER IN SYSTEM BUFFER 
	ADK	A1,1	UPDATE USER BUFFER ADDRESS
	ADK	A2,1	UPDATE SYSTEM BUFFER ADDRESS
	RF	MOVRT1	RETURN 
	EJECT
* 
* 
MSS100	EQU	*
	TM	A4,A2 
	RB(Z)	MSS010	DESTINATION BUFFER ADDRESS EVEN 
* 
*	SOURCE BUFFER EVEN , DESTINATION BUFFER ODD 
*	OR
*	SOURCE BUFFER ODD  , DESTINATION BUFFER EVEN
* 
MSS110	EQU	*
	LCR	A4,A1	LOAD CHARACTER 
	SCR	A4,A2	STORE CHARACTER
	ADK	A1,1	UPDATE SOURCE ADDRESS 
	ADK	A2,1	UPDATE DESTINATION ADDRESS
	SUK	A3,1	DECREMENT LENGTH
	RB(P)	MSS110	MORE TO MOVE
	RF	MOVRT1	RETURN 
* 
	IFT	MMUPAG=1 
	EJECT			TMOVE
* 
* 
********* 
* MOVUS * 
********* 
* 
* 
*	SUBROUTINE TO MOVE CHARACTERS 
*	FROM USER BUFFER TO SYSTEM BUFFER 
* 
*	ENTRY:  A1 = USER BUFFER ADDRESS
*	        A2 = SYSTEM BUFFER ADDRESS
*	        A3 = BUFFER LENGTH
*	        A5 = TTAB ADDRESS USER TASK 
* 
*	EXIT :  A1 = USER BUFFER ADDRESS+BUFFER LENGTH
*	        A2 = SYSTEM BUFFER ADDRESS+BUFFER LENGTH
*	        A3 = 0
* 
MOVUS	EQU	* 
	ADK	A3,0	CHECK LENGTH
	RF(NP)	MOVRT2	NOTHING TO MOVE, RETURN
	STR	A4,A15	SAVE A4 
	STR	A5,A15	SAVE A5 
	SUKL	A15,32		=2
	TS	2,A15	SAVE MMU	=2 
	TL	TTB:MT,A5	LOAD USER MMU 
	LDK	A4,1	MASK
	TM	A4,A1 
	RF(Z)	MUS110	USER BUFFER EVEN
	TM	A4,A2 
	RF(Z)	MUS100	SYSTEM BUFFER EVEN
* 
	EJECT			TMOVE
* 
*	USER BUFFER ODD,SYSTEM BUFFER ODD 
* 
	ELR	A5,A1	FIRST CHARACTER FROM USER BUFFER 
MUS005	EQU	*		=1
	SCR	A5,A2
	ADK	A1,1	USER BUFFER EVEN
	ADK	A2,1	SYSTEM BUFFER EVEN
	SUK	A3,1	DECREMENT LENGTH
	RF(NP)	MOVRT3	ALL MOVED, RETURN
* 
*	USER BUFFER EVEN,SYSTEM BUFFER EVEN 
* 
MUS010	EQU	*
	TM	A4,A3 
	RF(Z)	MUS020	REQUESTED LENGTH EVEN 
	LDK	A4,0	INDICATE LENGTH ODD 
* 
MUS020	EQU	*
	MVUS	A3	MOVE BUFFER
	ADK	A4,0	CHECK LENGTH
	RF(NZ)	MOVRT3	ALL MOVED, RETURN
	ELR	A5,A1	LAST CHARACTER 
	ECR	A5,A5
	RB	MUS005		=1
* 
	XIF
* 
	EJECT			TMOVE
* 
* 
**********
* MOVRTN *
**********
* 
*	COMMON RETURN LABELS FOR MOVE ROUTINES
* 
MOVRT1	EQU	*
	ADK	A6,0 
	RB(N)	RTNA14	A14 RETURN
	LDR*	A6,A15	SAVED REGISTER 
	IFT	MMUPAG=1 
	RF	MOVRTN		=2
MOVRT3	EQU	*
	TL	2,A15	SAVED MMU	=2
	ADKL	A15,32		=2
	XIF
MOVRTN	EQU	*
	LDR*	A5,A15	RELOAD A5
	LDR*	A4,A15	RELOAD A4
	LDK	A3,0	ALL MOVED 
* 
MOVRT2	EQU	*
	RTN	A15
* 
	IFT	MMUPAG=1 
	EJECT			TMOVE
* 
*	USER BUFFER ODD,SYSTEM BUFFER EVEN
* 
MUS100	EQU	*
	ELR	A4,A1	FIRST CHARACTER FROM USER BUFFER 
	RF	MUS125
* 
MUS110	EQU	*
	TM	A4,A2 
	RB(Z)	MUS010	SYSTEM BUFFER EVEN
* 
*	USER BUFFER EVEN,SYSTEM BUFFER ODD
* 
MUS120	EQU	*
	ELR	A4,A1	GET TO CHARACTERS
	ECR	A5,A4
	SCR	A5,A2	STORE CHARACTER IN SYSTEM BUFFER 
	ADK	A1,1	UPDATE USER BUFFER ADDRESS
	ADK	A2,1	UPDATE SYSTEM BUFFER ADDRESS
	SUK	A3,1	DECREMENT LENGTH
	RB(NP)	MOVRT3	ALL MOVED, RETURN
* 
MUS125	EQU	*
	ADK	A1,1	UPDATE USER BUFFER ADDRESS
	SCR	A4,A2	STORE CHARACTER IN SYSTEM BUFFER 
	ADK	A2,1	UPDATE SYSTEM BUFFER ADDRESS
	SUK	A3,1	DECREMENT LENGTH
	RB(P)	MUS120	MORE TO MOVE
	RB	MOVRT3	ALL MOVED, RETURN
* 
	EJECT			TMOVE
* 
* 
********* 
* MOVSU * 
********* 
* 
* 
*	SUBROUTINE TO MOVE CHARACTERS 
*	FROM SYSTEM BUFFER TO USER BUFFER 
* 
*	ENTRY:  A1 = SYSTEM BUFFER ADDRESS
*	        A2 = USER BUFFER ADDRESS
*	        A3 = BUFFER LENGTH
*	        A4 = TTAB ADDRESS USER TASK 
* 
*	EXIT :  A1 = SYSTEM BUFFER ADDRESS+LENGTH 
*	        A2 = USER BUFFER ADDRESS+LENGTH 
*	        A3 = 0
* 
MOVSU	EQU	* 
	ADK	A3,0	CHECK LENGTH
	RB(NP)	MOVRT2	NOTHING TO MOVE, RETURN
	STR	A4,A15	SAVE A4 
	STR	A5,A15	SAVE A5 
	SUKL	A15,32		=2
	TS	2,A15	SAVE MMU	=2 
	TL	TTB:MT,A4	LOAD USER MMU 
	LDK	A4,1	MASK
	TM	A4,A2 
	RF(Z)	MSU110	USER BUFFER EVEN
	TM	A4,A1 
	RF(Z)	MSU100	SYSTEM BUFFER EVEN
* 
	EJECT			TMOVE
* 
*	SYSTEM BUFFER ODD,USER BUFFER ODD 
* 
	ELR	A5,A2	USER BUFFER FIRST CHARACTER
	LCR	A5,A1	GET FIRST CHARACTER
	ESR	A5,A2	STORE FIRST CHARACTER IN USER BUFFER 
	ADK	A1,1	SYSTEM BUFFER EVEN
	ADK	A2,1	USER BUFFER EVEN
	SUK	A3,1	DECREMENT LENGTH
	RB(NP)	MOVRT3	NOTHING TO MOVE, RETURN
* 
	EJECT			TMOVE
* 
*	SYSTEM BUFFER EVEN,USER BUFFER EVEN 
* 
MSU010	EQU	*
	TM	A4,A3 
	RF(Z)	MSU020	REQUESTED LENGTH EVEN 
	SUK	A3,1	LENGTH EVEN 
	LDK	A4,0	INDICATE LENGTH ODD 
* 
MSU020	EQU	*
	LDR	A5,A3	SAVE LENGTH
	MVSU	A3	MOVE BUFFER
	ADR	A1,A5	UPDATE SYSTEM BUFFER ADDRESS 
	ADR	A2,A5	UPDATE USER BUFFER ADDRESS 
	ADK	A4,0	CHECK LENGTH
	RB(NZ)	MOVRT3	ALL MOVED, RETURN
	LDR*	A5,A1	GET LAST CHARACTER
	ADK	A1,1	UPDATE SYSTEM BUFFER ADDRESS
* 
MSU030	EQU	*
	ELR	A4,A2	GET LAST WORD IN USER BUFFER 
	ANK	A4,/FF 
	ANKL	A5,/FF00	LAST CHARACTER 
	ORR	A5,A4	LAST WORD IN USER BUFFER 
	ESR	A5,A2
	ADK	A2,1	UPDATE USER BUFFER ADDRESS
	RB	MOVRT3	RETURN 
* 
	EJECT			TMOVE
* 
*	SYSTEM BUFFER EVEN,USER BUFFER ODD
* 
MSU100	EQU	*
	SUK	A2,1	USER BUFFER EVEN
	ELR	A5,A2	FIRST CHARACTER IN USER BUFFER 
	RF	MSU130	MOVE FIRST CHARACTER 
* 
MSU110	EQU	*
	TM	A4,A1 
	RB(Z)	MSU010	SYSTEM BUFFER EVEN
* 
*	SYSTEM BUFFER ODD,USER BUFFER EVEN
* 
MSU120	EQU	*
	LCR	A5,A1	GET FIRST CHARACTER
	ECR	A5,A5	CHARACTER TO THE LEFT
	ADK	A1,1	UPDATE SYSTEM BUFFER ADDRESS
	SUK	A3,1	DECREMENT LENGTH
	RB(NP)	MSU030	MOVE LAST CHARACTER
* 
MSU130	EQU	*
	LCR	A5,A1	GET CHARACTER FROM SYSTEM BUFFER 
	ESR	A5,A2	STORE TWO CHARACTERS 
	ADK	A1,1	UPDATE SYSTEM BUFFER ADDRESS
	ADK	A2,2	UPDATE USER BUFFER ADDRESS
	SUK	A3,1	DECREMENT LENGTH
	RB(P)	MSU120	MORE TO MOVE
	RB	MOVRT3	ALL MOVED, RETURN
* 
	XIF			=3 
	IFT	MMUPAG=1		=3 
	IFT	UUMOV=0		=3
MOVUU	EQU	*		=3 
	RTN	A15		=3	=4 
	XIF			=3 
	IFT	MMUPAG+UUMOV=2		=3 
	EJECT			TMOVE
* 
* 
********* 
* MOVUU * 
********* 
* 
* 
*	SUBROUTINE TO MOVE CHARACTERS 
*	FROM USER BUFFER TO USER BUFFER 
* 
*	ENTRY:  A1 = SOURCE BUFFER ADDRESS
*	        A2 = DESTINATION BUFFER ADDRESS 
*	        A3 = LENGTH 
*	        A4 = TTAB ADDRESS RECEIVING TASK
*	        A5 = TTAB ADDRESS SENDING TASK
* 
*	EXIT:   A1,A2,A3,A8,A9,A10,A11 ARE DESTROYED
* 
MOVUU	EQU	* 
	LDR	A11,A3	SAVE LENGTH 
	RF(NP)	MUU120	NOTHING TO MOVE, RETURN
	LDR	A9,A1	SAVE SOURCE ADDRESS
	LDR	A10,A2	SAVE DESTINATION ADDRESS
* 
	EJECT			TMOVE
* 
* 
MUU100	EQU	*
	LDKL	A3,INTLEN	INTERMEDIATE BUFFER LENGTH
	RF(NP)	MUU120	INTERMEDIATE BUFFER TOO SMALL
	CWR	A11,A3 
	RF(G)	MUU110	MORE THAN ONE MOVE NEEDED 
	LDR	A3,A11	REMAINING BUFFER LENGTH 
* 
MUU110	EQU	*
	LDR	A8,A3	SAVE PART LENGTH 
	LDR	A1,A9	SOURCE BUFFER ADDRESS
	LDKL	A2,INTBUF	INTERMEDIATE BUFFER ADDRESS 
	CF	A15,MOVUS	MOVE FROM USER TO SYSTEM
	LDR	A9,A1	SAVE NEW SOURCE ADDRESS
	LDKL	A1,INTBUF	INTERMEDIATE BUFFER ADDRESS 
	LDR	A2,A10	DESTINATION ADDRESS 
	LDR	A3,A8	LENGTH 
	CF	A15,MOVSU	MOVE FROM SYSTEM TO USER
	LDR	A10,A2	SAVE NEW DESTINATION ADDRESS
	SUR	A11,A8	DECREMENT LENGTH
	RB(P)	MUU100	MORE TO MOVE
* 
MUU120	EQU	*
	RTN	A15
* 
	EJECT			TMOVE
* 
*	INTERMEDIATE BUFFER 
* 
INTBUF	EQU	*
	RES	LENGTH 
INTLEN	EQU	*-INTBUF 
* 
* 
* 
	XIF
* 
* 
* 
	END

Full view