268 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			268 lines
		
	
	
	
		
			6.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| .sect .text
 | |
| .sect .rom
 | |
| .sect .data
 | |
| .sect .bss
 | |
| .sect .text
 | |
| !----------------------------------------------------------------------------
 | |
| !		CLEARS , INCREMENTS , DECREMENTS
 | |
| !-----------------------------------------------------------------------------
 | |
| 
 | |
| inc_z:		move.l	sp,a0
 | |
| 4:
 | |
| #if test
 | |
| 		comp	und,(a0)
 | |
| 		bne	3f	;	bsr	e_iund
 | |
| 3:
 | |
| #endif
 | |
| 		ad	#1,(a0)
 | |
| #if test
 | |
| 		bvs	9f
 | |
| #endif
 | |
| 		jmp	(a4)
 | |
| #ifdef lword
 | |
| inl__1W:	move.l	a2,a0	;	sub.l	#4,a0	;	bra 4b
 | |
| inl__2W:	move.l	a2,a0	;	sub.l	#8,a0	;	bra 4b
 | |
| inl__3W:	move.l	a2,a0	;	sub.l	#12,a0	;	bra 4b
 | |
| #else
 | |
| inl__1W:	move.l	a2,a0	;	sub.l	#2,a0	;	bra 4b
 | |
| inl__2W:	move.l	a2,a0	;	sub.l	#4,a0	;	bra 4b
 | |
| inl__3W:	move.l	a2,a0	;	sub.l	#6,a0	;	bra 4b
 | |
| #endif
 | |
| inl_w_1:	move.l	#-1,d0	;	move.b	(a3)+,d0
 | |
| 2:		asl.l	wmu,d0
 | |
| 1:		move.l	a2,a0	;	add.l	d0,a0	;	bra 4b
 | |
| inl_pw:		adroff		;	move.w	(a1),d0
 | |
| 6:		asl.l	wmu,d0	;	add.l	#0+l0,d0
 | |
| 		bra	1b 
 | |
| inl_qpw:	move.l	(sp)+,d0 ;	bra	6b
 | |
| inl_nw:		adroff		;	move.w	(a1),d0	
 | |
| 		ext.l	d0	;	bra	2b
 | |
| inl_qnw:	move.l	(sp)+,d0 ;	bra	2b
 | |
| ine_lw:		adroff		;	move.w	(a1),d0	;	bra 5f
 | |
| ine_qw:		move.l	(sp)+,d0 ;	bra	5f
 | |
| ine_w0:		clr.w	d0	;	move.b	(a3)+,d0
 | |
| 5:		asl.l	wmu,d0	;	move.l	d0,a0
 | |
| 		add.l	a6,a0	;	bra	4b
 | |
| 
 | |
| !---------------------------------------------------------------------------
 | |
| 
 | |
| dec_z:		move.l	sp,a0
 | |
| 4:
 | |
| #if test 			
 | |
| 		locptr
 | |
| 		heaptr
 | |
| 		extptr
 | |
| 7:		bra	e_badptr
 | |
| 6:
 | |
| 		comp	und,(a0)	;bne	3f
 | |
| 		bsr	e_iund
 | |
| 3:
 | |
| #endif
 | |
| 		subt	#1,(a0)
 | |
| #if test
 | |
| 		bvs	9f
 | |
| #endif
 | |
| 		jmp	(a4)
 | |
| del_w_1:	move.l	#-1,d0	;	move.b	(a3)+,d0
 | |
| 1:		asl.l	wmu,d0
 | |
| 2:		move.l	a2,a0	;	add.l	d0,a0	;	bra 4b
 | |
| del_pw:		adroff		;	move.w	(a1),d0
 | |
| 5:		asl.l	wmu,d0	;	add.l	#0+l0,d0	;	bra 2b
 | |
| del_qpw:	move.l	(sp)+,d0 ;	bra	5b
 | |
| del_nw:		adroff		;	move.w	(a1),d0
 | |
| 		ext.l	d0	;	bra	1f
 | |
| del_qnw:	move.l	(sp)+,d0 ;	bra	1f
 | |
| dee_w0:		clr.w	d0	;	move.b	(a3)+,d0
 | |
| 0:		asl.l	wmu,d0	;	move.l	d0,a0
 | |
| 		add.l	a6,a0	;	bra	4b
 | |
| dee_lw:		adroff		;	move.w	(a1),d0	;	bra 0b
 | |
| dee_qw:		move.l	(sp)+,d0 ;	bra	0b
 | |
| 
 | |
| #if test
 | |
| 9:		bsr	e_iovfl		!error routine for integer overflow
 | |
| 		jmp	(a4)
 | |
| #endif
 | |
| 
 | |
| !----------------------------------------------------------------------------
 | |
| 
 | |
| zrl__1W:	cl	l_1(a2)	;	jmp	(a4)
 | |
| zrl__2W:	cl	l_2(a2)	;	jmp	(a4)
 | |
| zrl_w_1:	move.l	#-1,d0	;	move.b	(a3)+,d0
 | |
| 1:		asl.l	wmu,d0	;	add.l	a2,d0
 | |
| 		move.l	d0,a0	
 | |
| #if test
 | |
| 		locptr
 | |
| 7:		bra	e_badptr
 | |
| 6:
 | |
| #endif
 | |
| 		cl	(a0)
 | |
| 		jmp	(a4)
 | |
| zrl_nw:		adroff		;	move.w	(a1),d0	
 | |
| 		ext.l	d0	;	bra	1b
 | |
| zrl_qnw:	move.l	(sp)+,d0 ;	bra	1b
 | |
| zrl_pw:		adroff		;	move.w	(a1),d0
 | |
| 2:		asl.l	wmu,d0	;	add.l	a2,d0
 | |
| 		move.l	d0,a0	;	cl	l0(a0)
 | |
| 		jmp	(a4)
 | |
| zrl_qpw:	move.l	(sp)+,d0 ;	bra	2b
 | |
| zre_lw:		adroff		;	move.w	(a1),d0	;	bra 7f
 | |
| zre_qw:		move.l	(sp)+,d0 ;	bra	7f
 | |
| zre_w0:		clr.w	d0	;	move.b	(a3)+,d0
 | |
| 7:		asl.l	wmu,d0	;	add.l	a6,d0
 | |
| 		move.l	d0,a0	
 | |
| #if test
 | |
| 		extptr
 | |
| 7:		bra	e_badptr
 | |
| 6:
 | |
| #endif
 | |
| 		cl	(a0)
 | |
| 		jmp	(a4)
 | |
| zrf_l:		adroff		;	move.w	(a1),d0	;	bra 8f
 | |
| zrf_z:		mov	(sp)+,d0
 | |
| 8:		move.l	d7,d1
 | |
| 3:		asr.w	#1,d0	;	dbcs	d1,3b
 | |
| 		bcs	e_oddz	;	sub.w	#1,d0
 | |
| 0:		cl	-(sp)	;	dbra	d0,0b
 | |
| 		jmp	(a4)
 | |
| zer_s0:		clr.w	d0	;	move.b	(a3)+,d0	; bra 8b
 | |
| zer_l:		adroff		;	move.w	(a1),d0	;	bra 8b
 | |
| zer_z:		mov	(sp),d0	;	bra	8b
 | |
| ! The test on illegal argument takes some time , specially in 4byte case.
 | |
| 
 | |
| !-----------------------------------------------------------------------
 | |
| !		LOGICAL GROUP 
 | |
| !-------------------------------------------------------------------------
 | |
| 
 | |
| and_1W:		mov	(sp)+,d1
 | |
| 		an	d1,(sp)
 | |
| 		jmp	(a4)
 | |
| and_l:		adroff		;	move.w	(a1),d0	;	bra 1f
 | |
| and_z:		mov	(sp)+,d0
 | |
| 1:		ble	e_oddz	;	move.l	d0,a0
 | |
| 		move.l	d7,d2
 | |
| 2:		asr.l	#1,d0	;	dbcs	d2,2b	;	bcs e_oddz
 | |
| 		add.l	sp,a0	;	sub.l	#1,d0
 | |
| 3:		mov	(sp)+,d1;	an	d1,(a0)+
 | |
| 		dbra	d0,3b	;	jmp	(a4)
 | |
| 
 | |
| !------------------------------------------------------------------------------
 | |
| 
 | |
| ior_1W:		mov	(sp)+,d1;	inor	d1,(sp)
 | |
| 		jmp	(a4)
 | |
| ior_s0:		clr.w	d0	;	move.b	(a3)+,d0;	bra 4f
 | |
| ior_l:		adroff		;	move.w	(a1),d0	;	bra 4f
 | |
| ior_z:		mov	(sp)+,d0
 | |
| 4:		ble	e_oddz	;	move.l	d0,a0
 | |
| 		move.l	d7,d2
 | |
| 5:		asr.l	#1,d0	;	dbcs	d2,5b	;	bcs e_oddz
 | |
| 		add.l	sp,a0	;	sub.l	#1,d0
 | |
| 		move.l	d6,d1
 | |
| 3:		mov	(sp)+,d1
 | |
| 		inor	d1,(a0)+;	dbra	d0,3b
 | |
| 		jmp	(a4)
 | |
| 
 | |
| !----------------------------------------------------------------------------
 | |
| 
 | |
| xor_l:		adroff		;	move.w	(a1),d0	;	bra 6f
 | |
| xor_z:		mov	(sp)+,d0
 | |
| 6:		ble	e_oddz	;	move.l	d0,a0
 | |
| 		move.l	d7,d2
 | |
| 8:		asr.l	#1,d0	;	dbcs	d2,8b	;	bcs e_oddz
 | |
| 		add.l	sp,a0	;	sub.l	#1,d0
 | |
| 7:		mov	(sp)+,d1
 | |
| 		exor	d1,(a0)+;	dbra	d0,7b
 | |
| 		jmp	(a4)
 | |
| 
 | |
| !----------------------------------------------------------------------------
 | |
| 
 | |
| com_l:		adroff		;	move.w	(a1),d0	;	bra 0f
 | |
| com_z:		mov	(sp)+,d0
 | |
| 0:		ble	e_oddz	;	move.l	d7,d2
 | |
| 1:		asr.l	#1,d0	;	dbcs	d2,1b	;	bcs e_oddz
 | |
| 		move.l	sp,a0	;	sub.l	#1,d0
 | |
| 2:		nt	(a0)+	;	dbra	d0,2b
 | |
| 		jmp	(a4)
 | |
| 
 | |
| !---------------------------------------------------------------------------
 | |
| 
 | |
| rol_l:		adroff		;	move.w	(a1),d0	;	bra 3f
 | |
| rol_z:		mov	(sp)+,d0
 | |
| 3:		ble	e_oddz	;	move.l	d7,d2
 | |
| 4:		asr.l	#1,d0	;	dbcs	d2,4b
 | |
| 		bcs e_oddz
 | |
| 		sub.l	#1,d0
 | |
| 		mov	(sp)+,d1
 | |
| 		bmi	2f
 | |
| 0:		move.l	sp,a0		!d0 = #words-1 , d1 = shift count
 | |
| 5:		mov	(a0),d2	;	rotl	d1,d2
 | |
| 		mov	d2,(a0)+;	dbra	d0,5b
 | |
| 		jmp	(a4)
 | |
| 2:		nega	d1	;	bra	0f
 | |
| 2:		nega	d1	;	bra	0b
 | |
| ror_l:		adroff		;	move.w	(a1),d0	;	bra 6f
 | |
| ror_z:		mov	(sp)+,d0
 | |
| 6:		ble	e_oddz	;	move.l	d7,d2
 | |
| 7:		asr.l	#1,d0	;	dbcs	d2,7b
 | |
| 		bcs	e_oddz	;	sub.l	#1,d0
 | |
| 		mov	(sp)+,d1
 | |
| 		bmi	2b
 | |
| 0:		move.l	sp,a0
 | |
| 8:		mov	(a0),d2	;	rotr	d1,d2
 | |
| 		mov	d2,(a0)+;	dbra	d0,8b
 | |
| 		jmp	(a4)
 | |
| 
 | |
| !-----------------------------------------------------------------------------
 | |
| !		SET GROUP
 | |
| !------------------------------------------------------------------------------
 | |
| 
 | |
| set_s0:		clr.w	d0	;	move.b	(a3)+,d0
 | |
| 0:		ble	e_oddz	;	move.l	#0,d1
 | |
| 		mov	(sp)+,d1;	move.l	d0,d2
 | |
| 		move.l	d7,d3
 | |
| 1:		asr.l	#1,d2	;	dbcs	d3,1b
 | |
| 		bcs	e_oddz	;	sub.l	#1,d2
 | |
| 2:		cl	-(sp)	;	dbra	d2,2b
 | |
| 		move.l	sp,a0	;	move.l	d1,d2
 | |
| 		asr.l	#3,d2	;	cmp.l	d0,d2		!d2 byte number
 | |
| 		bmi	3f	;	bsr	e_set
 | |
| 		jmp	(a4)
 | |
| 3:
 | |
| #ifdef lword
 | |
| 		bchg	#1,d2					!0->3,1->2
 | |
| #endif
 | |
| 		bchg	#0,d2	;	add.l	d2,a0
 | |
| 		bset	d1,(a0)	;	jmp	(a4)	!d1 mod 8 bit set
 | |
| set_l:		adroff		;	move.w	(a1),d0 ;	bra 0b
 | |
| set_z:		mov	(sp)+,d0;	bra	0b
 | |
| 
 | |
| !----------------------------------------------------------------------------
 | |
| 
 | |
| inn_s0:		clr.w	d0	;	move.b	(a3)+,d0
 | |
| 0:		ble	e_oddz
 | |
| 		move.l	d6,d1	;	mov	(sp)+,d1
 | |
| 		btst	#0,d0	;	bne	e_oddz
 | |
| #ifdef lword
 | |
| 		btst	#1,d0	;	bne	e_oddz
 | |
| #endif
 | |
| 		move.l	sp,a0	;	add.l	d0,sp
 | |
| 		move.l	d1,d2	;	asri	#3,d2
 | |
| 		comp	d2,d0	;	bhi	3f
 | |
| 		cl	-(sp)
 | |
| !#if test
 | |
| !		bsr	e_set
 | |
| !#endif
 | |
| 		jmp	(a4)
 | |
| 3:
 | |
| #ifdef	lword
 | |
| 		bchg	#1,d2
 | |
| #else
 | |
| 		ext.l	d2
 | |
| #endif
 | |
| 		bchg	#0,d2	;	add.l	d2,a0
 | |
| 		btst	d1,(a0)	;	beq	7f
 | |
| 		mov	#1,-(sp);	jmp	(a4)
 | |
| 7:		cl	-(sp)	;	jmp	(a4)
 | |
| inn_l:		adroff		;	move.w	(a1),d0	;	bra 0b
 | |
| inn_z:		mov	(sp)+,d0;	bra	0b
 | |
| 
 | |
| 
 |