Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-03 - decus/20-0078/libsim/depbyt.mac
There is 1 other file named depbyt.mac in the archive. Click here to see a list.
00100	COMMENT * depbyte:  SIMULA specification;
00200	OPTIONS(/E:QUICK,depbyte);
00300	INTEGER PROCEDURE depbyte(val,w,firstbit,len);
00400	INTEGER val,w,firstbit,len;
00500	COMMENT Returns the value of W with the modification:
00600	The byte starting at FIRSTBIT (0-35) of length LEN bits is replaced
00700	by VAL.
00800	LEN>=0 AND LEN<=36 AND FIRSTBIT+LEN<=36 must hold.
00900	Note: The last LEN bits of VAL will be used, the other bits will be
01000	ignored.
01100	;
01200	
01300	!*;! MACRO-10 code !*;!
01400	
01500		TITLE	depbyte
01600		ENTRY	depbyte
01700		SUBTTL	SIMULA utility, Lars Enderin Feb 1978
01800	
01900	;!*** Copyright 1978 by the Swedish Defence Research Institute. ***
02000	;!*** Copying is allowed.					***
02100	
02200	
02300		sall
02400		search	simmac,simmcr,simrpa
02500		macinit
02600	
02700		;! Local definitions ;!
02800	
02900		len==1+<firstbit==1+<w==1+<result==<val==0>>>>
03300	
03400	depbyte:PROC
03500		L	X1,len(XTAC)	;! Byte length
03600		LI	XIAC		;! Address of target for DPB
03700		DPB	X1,[POINT 6,,11] ;! Size field in byte pointer
03800		SUBI	X1,^D36		;! Neg of bits left in word
03900		JUMPG	X1,L9		;! Too big
04000		ADD	X1,firstbit(XTAC);! Last bit no
04100		JUMPG	X1,L9		;! Return zero on error
04200		MOVN	X1,X1		;! Bits left in word
04300		CAILE	X1,^D36
04400		 GOTO	L9
04500		DPB	X1,[POINT 6,,5] ;! Pos in byte pointer
04600		L	XIAC,w(XTAC)	;! Initial word
04700		L	X1,val(XTAC)	;! Byte value to insert
04800		DPB	X1,		;! Insert it
04900		ST	XIAC,result(XTAC)
05000		RET
05100	L9():!	SETZM	val(XTAC)
05200		RET
05300		EPROC
05400		LIT
05500		END;