.sect .text .sect .rom .sect .data .sect .bss .sect .text !-----------------------------------------------------------------------------. ! ARRAY GROUP !------------------------------------------------------------------------------- !subroutine calcarr: move.l (sp)+,d3 !save return address move.l (sp)+,a0 !address of array describtor mov (sp)+,d0 !index subt (a0)+,d0 !relative address blt 9f comp (a0)+,d0 !check upper bound bgt 9f move.l #0,d1 mov (a0),d1 mulu d1,d0 !objectsize in d1 move.l (sp)+,a0 ad d0,a0 !a0 address of array element move.l d3,-(sp) rts 9: bsr e_array ;tst.l (sp)+ ; jmp (a4) aar_1W: bsr calcarr ; move.l a0,-(sp) jmp (a4) aar_l: adroff ; cmp.w wrd,(a5) 0: bne e_illins ; bra aar_1W aar_z: comp wrd,(sp)+ ; bra 0b lar_1W: bsr calcarr ; add.l d1,a0 asr.w #1,d1 ; bcc 5f clr.l d1 ; move.b -(a0),d1 mov d1,-(sp); jmp (a4) 5: #ifdef lword asr.w #1,d1 ; bcc 6f move.w -(a0),d1; move.l d1,-(sp) jmp (a4) #endif 6: sub.l #1,d1 7: mov -(a0),-(sp); dbra d1,7b jmp (a4) lar_l: adroff ; cmp.w wrd,(a5) 8: bne e_illins; bra lar_1W lar_z: comp wrd,(sp)+ ; bra 8b sar_1W: bsr calcarr ; asr.w #1,d1 bcc 5f ; testen (sp)+ move.b -1(sp),(a0); jmp (a4) 5: #ifdef lword asr.w #1,d1 ; bcc 6f tst.w (sp)+ ; move.w (sp)+,(a0) jmp (a4) #endif 6: sub.l #1,d1 7: mov (sp)+,(a0)+ ; dbra d1,7b jmp (a4) sar_z: comp wrd,(sp)+ ; bra 1f sar_l: adroff ; cmp.w wrd,(a5) 1: bne e_illins ; bra sar_1W !------------------------------------------------------------------------- ! CONVERT GROUP !-------------------------------------------------------------------------w cii_z: mov (sp)+,d0 ; mov (sp)+,d1 ; !d0 destination size !d1 source size #if test cmp.w wrd,d1 ; bne 0f comp und,(sp) ; bne 0f bsr e_iund #endif 0: cmp.w d0,d1 ; bne 1f ; jmp (a4) 1: bge 6f ; mov (sp)+,d2 cmp.w #1,d1 ; bne 3f !d1<d0 ext.w d2 #ifndef lword cmp.w #2,d0 ; bne 3f move.w d2,-(sp); jmp (a4) #endif 3: ext.l d2 ; move.l d2,-(sp); jmp (a4) 6: #ifdef lword bsr e_conv ; add.l #4,sp #else move.w (sp)+,d2 #if test bne 7f ; tst.w (sp) ; bge 9f 8: bsr e_conv ; jmp (a4) 7: comp #-1,d2 ; bne 8b tst.w (sp) ; bge 8b #endif #endif 9: jmp (a4) cui_z: mov (sp)+,d0 ; mov (sp)+,d1 sub.w d1,d0 ; bne 2f #if test testen (sp) ; bpl 1f 0: bsr e_conv #endif 1: jmp (a4) 2: #ifdef lword sub.l d0,sp ; bsr e_conv #else bgt 3f ; cmp.w #-2,d0 ; beq 5f bsr e_conv #if test tst.w (sp) ; bne 0b tst.w 2(sp) ; bmi 0b #endif 5: sub.l #-2,sp ; jmp (a4) 3: cmp.w #2,d0 ; beq 4f bsr e_conv 4: clr.w -(sp) #endif jmp (a4) ciu_z: mov (sp)+,d0 ; mov (sp)+,d1 #if test cmp.w wrd,d1 ; bne 0f comp und,(sp) ; bne 0f bsr e_iund #endif 0: sub.w d1,d0 ; bne 1f jmp (a4) #ifndef lword 1: bgt 4f ; cmp.w #-2,d0 beq 5f ; bsr e_conv 5: #if test move.w (sp),d1 ; beq 6f not.w d1 ; beq 6f bsr e_conv #endif 6: add.l #2,sp ; jmp (a4) #endif 4: 1: bclr #0,d0 ; beq 2f #ifdef lword clr.b 2(sp) #else clr.b (sp) #endif 2: bclr #1,d0 ; beq 3f #ifdef lword clr.w (sp) #else clr.w -(sp) #endif 3: jmp (a4) cuu_z: mov (sp)+,d0 ; mov (sp)+,d1 sub.w d1,d0 ; bne 1f jmp (a4) 1: #ifdef lword bsr e_conv ; sub.l d0,sp #else blt 3f #if test cmp.w #2,d0 ; beq 2f bsr e_conv #endif 2: clr.w -(sp) ; jmp (a4) 3: #if test cmp.w #-2,d0 ; beq 4f bsr e_conv #endif 4: tst.w (sp)+ #if test beq 5f ; bsr e_conv #endif #endif 5: jmp (a4) !-------------------------------------------------------------------------- cuf_z: cfu_z: cff_z: cfi_z: cif_z: mov (sp)+,d0 ; subt (sp)+,d0 ext.l d0 sub.l d0,sp #ifdef FLTRAP bra flnim !floating point not implemented #else jmp (a4) #endif