6 !-----------------------------------------------------------------------------.
8 !-------------------------------------------------------------------------------
10 calcarr: move.l (sp)+,d3 !save return address
11 move.l (sp)+,a0 !address of array describtor
13 subt (a0)+,d0 !relative address
15 comp (a0)+,d0 !check upper bound
19 mulu d1,d0 !objectsize in d1
21 ad d0,a0 !a0 address of array element
31 9: bsr e_array ;tst.l (sp)+ ; jmp (a4)
33 aar_1W: bsr calcarr ; move.l a0,-(sp)
35 aar_l: adroff ; cmp.w wrd,(a5)
36 0: bne e_illins ; bra aar_1W
37 aar_z: comp wrd,(sp)+ ; bra 0b
39 lar_1W: bsr calcarr ; add.l d1,a0
41 clr.l d1 ; move.b -(a0),d1
42 mov d1,-(sp); jmp (a4)
46 move.w -(a0),d1; move.l d1,-(sp)
50 7: mov -(a0),-(sp); dbra d1,7b
53 lar_l: adroff ; cmp.w wrd,(a5)
54 8: bne e_illins; bra lar_1W
55 lar_z: comp wrd,(sp)+ ; bra 8b
57 sar_1W: bsr calcarr ; asr.w #1,d1
59 move.b -1(sp),(a0); jmp (a4)
63 tst.w (sp)+ ; move.w (sp)+,(a0)
67 7: mov (sp)+,(a0)+ ; dbra d1,7b
69 sar_z: comp wrd,(sp)+ ; bra 1f
70 sar_l: adroff ; cmp.w wrd,(a5)
71 1: bne e_illins ; bra sar_1W
73 !-------------------------------------------------------------------------
75 !-------------------------------------------------------------------------w
77 cii_z: mov (sp)+,d0 ; mov (sp)+,d1 ; !d0 destination size
81 comp und,(sp) ; bne 0f
84 0: cmp.w d0,d1 ; bne 1f ; jmp (a4)
85 1: bge 6f ; mov (sp)+,d2
86 cmp.w #1,d1 ; bne 3f !d1<d0
90 move.w d2,-(sp); jmp (a4)
92 3: ext.l d2 ; move.l d2,-(sp); jmp (a4)
95 bsr e_conv ; add.l #4,sp
99 bne 7f ; tst.w (sp) ; bge 9f
100 8: bsr e_conv ; jmp (a4)
101 7: comp #-1,d2 ; bne 8b
107 cui_z: mov (sp)+,d0 ; mov (sp)+,d1
116 sub.l d0,sp ; bsr e_conv
118 bgt 3f ; cmp.w #-2,d0 ; beq 5f
124 5: sub.l #-2,sp ; jmp (a4)
125 3: cmp.w #2,d0 ; beq 4f
131 ciu_z: mov (sp)+,d0 ; mov (sp)+,d1
133 cmp.w wrd,d1 ; bne 0f
134 comp und,(sp) ; bne 0f
137 0: sub.w d1,d0 ; bne 1f
140 1: bgt 4f ; cmp.w #-2,d0
143 6: add.l #2,sp ; jmp (a4)
145 4: 1: bclr #0,d0 ; beq 2f
151 2: bclr #1,d0 ; beq 3f
159 cuu_z: mov (sp)+,d0 ; mov (sp)+,d1
164 bsr e_conv ; sub.l d0,sp
171 2: clr.w -(sp) ; jmp (a4)
174 cmp.w #-2,d0 ; beq 4f
184 !--------------------------------------------------------------------------
186 cuf_z: cfu_z: cff_z: cfi_z: cif_z:
187 mov (sp)+,d0 ; subt (sp)+,d0
190 bra flnim !floating point not implemented
324 mov (sp)+,d0 ; cmp #4,d0 ; beq 1f
333 mov (sp)+,d0 ; cmp #8,d0 ; beq 1f