123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- .define .sar
- .define .lar
- .define .aar
- .sect .text
- .sect .rom
- .sect .data
- .sect .bss
- !register usage:
- ! a0 : descriptor address
- ! d0 : index
- ! a1 : base address
- .sect .text
- .aar:
- move.l (sp)+,d2 ! return address
- move.l (sp)+,a0
- move.w (sp)+,d0
- move.l (sp)+,a1
- sub (a0),d0 ! index - lower bound : relative index
- !chk 2(a0),d0
- !blt 9f
- !cmp 2(a0),d0
- !bgt 9f
- mulu 4(a0),d0 ! total # bytes
- add d0,a1 ! address of element
- move.l a1,-(sp)
- move.l d2,-(sp)
- rts
- .lar:
- move.l (sp)+,d2 ! return address
- move.l (sp)+,a0
- move.w (sp)+,d0
- move.l (sp)+,a1
- sub (a0),d0
- !chk 2(a0),d0
- !blt 9f
- !cmp 2(a0),d0
- !bgt 9f
- move 4(a0),d1
- mulu d1,d0
- add d0,a1
- add d1,a1
- asr #1,d1
- bne 3f
- clr d1
- move.b -(a1),d1
- move d1,-(sp)
- bra 4f
- 3:
- move -(a1),-(sp)
- sub #1,d1
- bgt 3b
- 4:
- move.l d2,-(sp)
- rts
- !9:
- !move.w #EARRAY,-(sp)
- !jmp .fat
- .sar:
- move.l (sp)+,d2
- move.l (sp)+,a0
- move.w (sp)+,d0
- move.l (sp)+,a1
- sub (a0),d0
- !chk 2(a0),d0
- !blt 9b
- !cmp 2(a0),d0
- !bgt 9b
- move 4(a0),d1
- mulu d1,d0
- add d0,a1
- asr #1,d1
- bne 3f
- move (sp)+,d1
- move.b d1,(a1)
- bra 4f
- 3:
- move (sp)+,(a1)+
- sub #1,d1
- bgt 3b
- 4:
- move.l d2,-(sp)
- rts
|