35 lines
594 B
ArmAsm
35 lines
594 B
ArmAsm
|
.macro xfer_in from, to
|
||
|
move.w (%A0), (%A1)+
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
.if \to-\from
|
||
|
xfer_in "(\from+1)"
|
||
|
.else
|
||
|
|
||
|
.endif
|
||
|
.endm
|
||
|
|
||
|
|
||
|
;pragma parameter xfer_s_256(__A0, __A1)
|
||
|
;void xfer_s_256(Ptr srcreg, Ptr destmem);
|
||
|
xfer_256:
|
||
|
movem.l %D0/%A1-%A2, -(%SP)
|
||
|
xfer_256_loop:
|
||
|
xfer_s_in 0, 255
|
||
|
xfer_256_end:
|
||
|
movem.l (%SP)+, %D0/%A1-%A2
|
||
|
|
||
|
|
||
|
;pragma parameter xfer_s(__D0, __A0, __A1)
|
||
|
;void xfer_s(uint8_t numBytes, Ptr srcreg, Ptr destmem);
|
||
|
xfer:
|
||
|
movem.l %D0/%A1-%A2, -(%SP)
|
||
|
andi.l #0xFF, %D0
|
||
|
subi.l #256, %D0
|
||
|
neg.l %D0
|
||
|
lsl.l #2, %D0
|
||
|
addi.l #xfer_256, %D0
|
||
|
movea.l %D0, %A2
|
||
|
jmp %A2
|