SDP Data
This message turned up in search, but its forum couldn’t be identified from the original transcript, so it may not be linked into its thread.
The operation you speak of, being a BYTE oriented move, would be improved
by making it a WORD or LONG operation, regardless of processor. Comparing a
MOVEM with repetetive MOVE.L shows a large gain in speed on a 68000. Not
too sure what the difference would be, if any, on a 68010 using the DBRA.
As for actually writing the routine, it isn't such a tough one. Say I have
(through saving the registers I need with a MOVEM, to be restored after the
operation) 8 registers available. Also suppose i know that the transfer is
always 512 bytes (this is a rela life case), and that the source block is
always longword aligned.
First, I check the alignment of the destination. If it is even, I can
simply set up a counter for the DBRA, then…
MOVEM.L source,reglist
MOVEM.L reglist,dest
ADD #8,source
ADD #8,dest
DBRA back to the label I forgot to put in.
If the alignment needs work, I simply transfer 1 byte, transfer a large
block, (getting as close as I can within the 8 bytes at a time limitation),
transfer a smale even number, then 1 nore byte to make it work out even.
If the destination is always even, this techniques will increase the
transfer rate by a large amount. The hard disk driver I am working on
improved by about 8 or 9K per second using it, and on pure memory moves, a
much greater speed increase woud be realized.