494 lines
		
	
	
	
		
			7.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			494 lines
		
	
	
	
		
			7.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
.sect .text
 | 
						|
!--------------------------------------------------------------------------
 | 
						|
!	Load constant , load local , store local
 | 
						|
!--------------------------------------------------------------------------
 | 
						|
 | 
						|
loc_0:	mov	d6,-(sp)
 | 
						|
	jmp	(a4)
 | 
						|
loc_1:	loc_2:	loc_3:	loc_4:	loc_5:	loc_6:	loc_7:	loc_8:
 | 
						|
loc_9:	loc_10:	loc_11:	loc_12:	loc_13:	loc_14:	loc_15:	loc_16:
 | 
						|
loc_17:	loc_18:	loc_19:	loc_20:	loc_21:	loc_22:	loc_23:	loc_24:	
 | 
						|
loc_25:	loc_26:	loc_27:	loc_28:	loc_29:	loc_30:	loc_31:	loc_32:
 | 
						|
loc_33:
 | 
						|
	asr.w	#2,d0		!make the multiplication undone
 | 
						|
	mov	d0,-(sp)
 | 
						|
	jmp	(a4)
 | 
						|
loc__1:
 | 
						|
	mov	#-1,-(sp)
 | 
						|
	jmp	(a4)
 | 
						|
loc_s0:	clr.w	d0
 | 
						|
	move.b	(a3)+,d0
 | 
						|
	mov	d0,-(sp)
 | 
						|
	jmp	(a4)
 | 
						|
loc_s_1:	mov	#-1,d0
 | 
						|
	move.b	(a3)+,d0
 | 
						|
	mov	d0,-(sp)
 | 
						|
	jmp	(a4)
 | 
						|
lpi_l:
 | 
						|
	adroff
 | 
						|
	move.w	(a5),d0
 | 
						|
	move.l	d0,-(sp)
 | 
						|
	jmp	(a4)
 | 
						|
lpi_q:	jmp	(a4)
 | 
						|
 | 
						|
loc_q:	jmp	(a4)
 | 
						|
#ifndef lword
 | 
						|
	 bra	e_illins
 | 
						|
#endif
 | 
						|
loc_l:	adroff
 | 
						|
	move.w	(a5),d0
 | 
						|
	ext.l	d0
 | 
						|
	mov	d0,-(sp)
 | 
						|
	jmp	(a4)
 | 
						|
ldc_0:	cl	-(sp)
 | 
						|
	cl	-(sp)
 | 
						|
	jmp	(a4)
 | 
						|
ldc_l:
 | 
						|
	adroff
 | 
						|
	move.w	(a5),d0
 | 
						|
	ext.l	d0		!ext works only on d register
 | 
						|
4:	move.l	d0,-(sp)
 | 
						|
#ifdef	lword
 | 
						|
	bmi	0f
 | 
						|
	clr.l	-(sp)
 | 
						|
	bra	1f
 | 
						|
0:	move.l	#-1,-(sp)
 | 
						|
1:
 | 
						|
#endif
 | 
						|
	jmp	(a4)
 | 
						|
ldc_q:
 | 
						|
#ifdef lword
 | 
						|
	tst.l	(sp)
 | 
						|
	bmi	0f
 | 
						|
	clr.l	-(sp)
 | 
						|
	bra	1f
 | 
						|
0:	move.l	#-1,-(sp)
 | 
						|
1:
 | 
						|
#endif
 | 
						|
	jmp	(a4)
 | 
						|
 | 
						|
!-------------------------------------------------------------------------
 | 
						|
!	offsets should be adapted for wordsize 4 .Use identifiers
 | 
						|
!	l3 to l_8 for the offsets in lol_3W to lol__8 . Use the
 | 
						|
!	preprocessor for conditional definitions .
 | 
						|
 | 
						|
lol_0:		mov	l0(a2),-(sp)	; jmp	(a4)
 | 
						|
lol_1W:		mov	l1(a2),-(sp)	; jmp	(a4)
 | 
						|
lol_2W:		mov	l2(a2),-(sp)	; jmp	(a4)
 | 
						|
lol_3W:		mov	l3(a2),-(sp)	; jmp	(a4)
 | 
						|
lol__1W:	mov	l_1(a2),-(sp)	; jmp	(a4)
 | 
						|
lol__2W:	mov	l_2(a2),-(sp)	; jmp	(a4)
 | 
						|
lol__3W:	mov	l_3(a2),-(sp)	; jmp	(a4)
 | 
						|
lol__4W:	mov	l_4(a2),-(sp)	; jmp	(a4)
 | 
						|
lol__5W:	mov	l_5(a2),-(sp)	; jmp	(a4)
 | 
						|
lol__6W:	mov	l_6(a2),-(sp)	; jmp	(a4)
 | 
						|
lol__7W:	mov	l_7(a2),-(sp)	; jmp	(a4)
 | 
						|
lol__8W:	mov	l_8(a2),-(sp)	; jmp	(a4)
 | 
						|
lol_w0:		clr.w	d0	
 | 
						|
		move.b	(a3)+,d0
 | 
						|
		asl.w	wmu,d0
 | 
						|
		mov	l0(a2,d0),-(sp)	
 | 
						|
		jmp	(a4)
 | 
						|
 | 
						|
lol_w_1:	move.l	#-1,d0
 | 
						|
		move.b	(a3)+,d0
 | 
						|
		asl.w	wmu,d0
 | 
						|
		mov	0(a2,d0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
lol_pw:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
5:		asl.l	wmu,d0
 | 
						|
		add.l	a2,d0
 | 
						|
		move.l	d0,a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		mov	l0(a0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
 | 
						|
lol_nw:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
		ext.l	d0
 | 
						|
2:		asl.l	wmu,d0
 | 
						|
		add.l	a2,d0
 | 
						|
		move.l	d0,a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		mov	(a0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
lol_qnw:	move.l	(sp)+,d0
 | 
						|
		bra	2b
 | 
						|
lol_qpw:	move.l	(sp)+,d0
 | 
						|
		bra	5b
 | 
						|
 | 
						|
 | 
						|
!--------------------------------------------------------------------------
 | 
						|
 | 
						|
ldl_0:		mov	l1(a2),-(sp)	!offset code
 | 
						|
		mov	l0(a2),-(sp)	!offset code
 | 
						|
		jmp	(a4)
 | 
						|
ldl_w_1:	move.l	#-1,d0
 | 
						|
		move.b	(a3)+,d0
 | 
						|
2:		asl.l	wmu,d0
 | 
						|
		add.l	a2,d0
 | 
						|
		move.l	d0,a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		mov	word(a0),-(sp)
 | 
						|
		mov	(a0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
ldl_pw:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
5:		asl.l	wmu,d0
 | 
						|
		add.l	a2,d0
 | 
						|
		move.l	d0,a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		mov	l1(a0),-(sp)
 | 
						|
		mov	l0(a0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
ldl_nw:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
		ext.l	d0
 | 
						|
		bra	2b
 | 
						|
ldl_qpw:	move.l	(sp)+,d0
 | 
						|
		bra	5b
 | 
						|
ldl_qnw:	move.l	(sp)+,d0
 | 
						|
		bra	2b
 | 
						|
 | 
						|
!-------------------------------------------------------------------------
 | 
						|
loe_lw:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
		bra	1f
 | 
						|
loe_qw:		move.l	(sp)+,d0
 | 
						|
		bra	1f
 | 
						|
 | 
						|
loe_w0:		loe_w1:		loe_w2:		loe_w3:		loe_w4:
 | 
						|
		sub.w	#624,d0
 | 
						|
		asl.w	#6,d0
 | 
						|
		move.b	(a3)+,d0
 | 
						|
1:		asl.l	wmu,d0
 | 
						|
		add.l	a6,d0
 | 
						|
		move.l	d0,a0
 | 
						|
#if	test
 | 
						|
		extptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		mov	(a0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
 | 
						|
lde_lw:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
		bra	1f
 | 
						|
lde_qw:		move.l	(sp)+,d0
 | 
						|
		bra	1f
 | 
						|
 | 
						|
lde_w0:		clr.w	d0
 | 
						|
		move.b	(a3)+,d0
 | 
						|
1:		asl.l	wmu,d0		
 | 
						|
		add.l	a6,d0
 | 
						|
		move.l	d0,a0
 | 
						|
#if	test
 | 
						|
		extptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		mov	word(a0),-(sp)
 | 
						|
		mov	(a0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
 | 
						|
!------------------------------------------------------------------------------
 | 
						|
lil_0:		move.l	l0(a2),a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
		heaptr
 | 
						|
		extptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		mov	(a0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
lil_1W:		move.l	l1(a2),a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
		heaptr
 | 
						|
		extptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		mov	(a0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
lil_pw:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
		bra	1f
 | 
						|
lil_qpw:	move.l	(sp)+,d0
 | 
						|
		bra	1f
 | 
						|
 | 
						|
lil_w0:		clr.w	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
 | 
						|
		move.l	l0(a0),a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
		heaptr
 | 
						|
		extptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		mov	(a0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
 | 
						|
lil_nw:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
		ext.l	d0
 | 
						|
		bra	1f
 | 
						|
lil_qnw:	move.l	(sp)+,d0
 | 
						|
		bra	1f
 | 
						|
 | 
						|
lil_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
 | 
						|
		move.l	(a0),a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
		heaptr
 | 
						|
		extptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		mov	(a0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
 | 
						|
!---------------------------------------------------------------------------
 | 
						|
lof_s0:		move.l	d6,d0
 | 
						|
		move.b	(a3)+,d0
 | 
						|
		bra	1f
 | 
						|
lof_l:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
		ext.l	d0
 | 
						|
		bra	1f
 | 
						|
lof_q:		move.l	(sp)+,d0
 | 
						|
		bra	1f
 | 
						|
lof_1W:		move.l	wrd,d0
 | 
						|
1:		move.l	(sp)+,a0
 | 
						|
		add.l	d0,a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
		heaptr
 | 
						|
		extptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		mov	(a0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
lof_2W:		move.l	wrd+word,d0	;	bra	1b
 | 
						|
lof_3W:		move.l	wrd+word+word,d0	;	bra	1b
 | 
						|
lof_4W:		move.l	wrd+word+word+word,d0	;	bra	1b
 | 
						|
ldf_l:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
		ext.l	d0
 | 
						|
2:		move.l	(sp)+,a0
 | 
						|
		add.l	d0,a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
		heaptr
 | 
						|
		extptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		mov	word(a0),-(sp)
 | 
						|
		mov	(a0),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
ldf_q:		move.l	(sp)+,d0
 | 
						|
		bra	2b
 | 
						|
 | 
						|
!-------------------------------------------------------------------------
 | 
						|
 | 
						|
lal_p:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
		bra	1f
 | 
						|
lal_qp:		move.l	(sp)+,d0
 | 
						|
1:		add.l	#0+l0,d0
 | 
						|
		bra	4f
 | 
						|
lal_0:		pea	l0(a2)
 | 
						|
		jmp	(a4)	
 | 
						|
lal_w0:		clr.w	d0
 | 
						|
		move.b	(a3)+,d0
 | 
						|
		asl.l	wmu,d0
 | 
						|
		add.l	#0+l0,d0
 | 
						|
		bra	3f
 | 
						|
lal_n:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
		ext.l	d0
 | 
						|
		bra	4f
 | 
						|
lal_qn:		move.l	(sp)+,d0
 | 
						|
4:		add.l	a2,d0
 | 
						|
		move.l	d0,-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
lal__1:		move.l	#-1,d0
 | 
						|
3:		pea	0(a2,d0)
 | 
						|
		jmp	(a4)
 | 
						|
lal_w_1:	move.l	#-1,d0
 | 
						|
2:		move.b	(a3)+,d0
 | 
						|
		asl.l	wmu,d0
 | 
						|
		bra	3b
 | 
						|
lal_w_2:	move.l	#-512,d0
 | 
						|
		bra	2b
 | 
						|
 | 
						|
lae_l:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
1:		add.l	a6,d0
 | 
						|
		move.l	d0,-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
lae_q:		move.l	(sp)+,d0
 | 
						|
		bra	1b
 | 
						|
lae_w0:		lae_w1:		lae_w2:		lae_w3:		lae_w4:
 | 
						|
lae_w5:		lae_w6:
 | 
						|
		sub.w	#484,d0
 | 
						|
		asl.w	#6,d0
 | 
						|
		move.b	(a3)+,d0
 | 
						|
		asl.w	wmu,d0
 | 
						|
		pea	0(a6,d0)
 | 
						|
		jmp	(a4)
 | 
						|
 | 
						|
!---------------------------------------------------------------------------
 | 
						|
lxl_1:		move.l	l0(a2),-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
lxl_l:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
		beq	5f
 | 
						|
		bgt	1f
 | 
						|
		blt	e_oddz
 | 
						|
1:		sub.l	#1,d0
 | 
						|
		bra	2f
 | 
						|
lxl_2:		move.l	#1,d0
 | 
						|
2:		move.l	a2,a0
 | 
						|
3:		move.l	l0(a0),a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		dbra	d0,3b
 | 
						|
		move.l	a0,-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
5:		move.l	a2,-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
 | 
						|
lxa_1:		move.l	#0,d0
 | 
						|
		bra	3f
 | 
						|
lxa_l:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
		bgt	1f
 | 
						|
		blt	e_oddz
 | 
						|
		pea	l0(a2)
 | 
						|
		jmp	(a4)
 | 
						|
1:		sub.l	#1,d0
 | 
						|
3:		move.l	a2,a0
 | 
						|
2:		move.l	l0(a0),a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		dbra	d0,2b
 | 
						|
		pea	l0(a0)
 | 
						|
		jmp	(a4)
 | 
						|
 | 
						|
!-----------------------------------------------------------------------
 | 
						|
 | 
						|
loi_q:		move.l	(sp)+,d1;	bra	8f
 | 
						|
loi_l:		adroff
 | 
						|
		clr.l	d1
 | 
						|
		move.w	(a5),d1
 | 
						|
		bra	8f
 | 
						|
loi_s0:		move.l	#0,d1
 | 
						|
		move.b	(a3)+,d1
 | 
						|
8:		cmp.l	#1,d1
 | 
						|
		beq	loi_1
 | 
						|
		cmp.l	#2,d1
 | 
						|
		beq	2f
 | 
						|
		move.l	d1,d0
 | 
						|
		move.w	d7,d2
 | 
						|
3:		asr.l	#1,d0	;	dbcs	d2,3b
 | 
						|
		bcs	e_oddz
 | 
						|
		bra	5f
 | 
						|
loi_1W:		loi_2W:		loi_3W:		loi_4W:
 | 
						|
		asr.w	#2,d0
 | 
						|
		sub.w	#168,d0
 | 
						|
		move.l	d0,d1
 | 
						|
		asl.w	wmu,d1
 | 
						|
5:		move.l	(sp)+,a0
 | 
						|
		add.l	d1,a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
		heaptr
 | 
						|
		extptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		sub.l	#1,d0
 | 
						|
1:		mov	-(a0),-(sp)
 | 
						|
		dbra	d0,1b
 | 
						|
		jmp	(a4)
 | 
						|
2:		move.l	(sp)+,a0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
		heaptr
 | 
						|
		extptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		move.w	(a0),d0
 | 
						|
		mov	d0,-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
loi_1:		move.l	(sp)+,a0
 | 
						|
		move.w	d6,d0
 | 
						|
#if	test
 | 
						|
		locptr
 | 
						|
		heaptr
 | 
						|
		extptr
 | 
						|
7:		bra	e_badptr
 | 
						|
6:
 | 
						|
#endif
 | 
						|
		move.b	(a0),d0
 | 
						|
		mov	d0,-(sp)
 | 
						|
		jmp	(a4)
 | 
						|
 | 
						|
los_z:		mov	(sp)+,d0
 | 
						|
		bra	0f
 | 
						|
los_l:		adroff
 | 
						|
		move.w	(a5),d0
 | 
						|
0:		checksize
 | 
						|
2:		move.l	#0,d1	;	move.w	(sp)+,d1 ;	bra	8b
 | 
						|
4:		move.l	(sp)+,d1 ;	bra	8b
 |