495 lines
7.7 KiB
Plaintext
495 lines
7.7 KiB
Plaintext
.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
|